2016-07-11 116 views
-1

Spark-cassandra-connector-java和Spark SQL DataFrame apis中使用Spark 1.5.1,筛选出长度小于或大于给定长度的字符串列的最佳方法是什么?如何根据列的长度减少/过滤Spark DataFrame(Java)中的列?

我试图做这样的事情

DataFrame df = context.sql("select key from mytable where key is not null") 
DataFrame fdf = df.filter(functions.length(df.col("key").gt(10)))) 

如何进行的functions.length(列)API的工作?它需要一个Column并返回一个Column,但是长度会发生什么?

回答

0

1)列是你需要应用谓词。所以改变括号

DataFrame fdf = df 
.filter(
    functions.length(df.col("key")) 
    .gt(10) 
) 

这是做什么应用基于列Key的谓词。首先我们将列键更改为Length(键)的列。基本上,应用功能,所有值列

[ "bird", "cat", "mouse" ] -> [ 4, 3, 5 ] 

然后,因为我们现在有一个数字列,我们采用比谓词更大的该列

[ 4 > 10, 3 > 10, 5 > 10 ] -> [ False, False, False ] 

布尔用于确定是否谓词通过或失败。

2)为什么不直接做检查在SQL

sqlContext.sql("SELECT * FROM test.common WHERE LENGTH(key) > 10") 

获取所有的值,其中关键的长度大于10

+0

谢谢。这非常有帮助。我在这个[link] {https://docs.datastax.com/en/datastax_enterprise/4.8/datastax_enterprise/spark/sparkSqlSupportedSyntax.html}处提到了DataStax文档,并没有看到那里列出的LENGTH关键字/函数。两种方法都可以工作,但我已经简化了这篇文章的例子,所以我需要使用的是带有过滤器功能的例子。 – Joe