如何根据列的长度减少/过滤Spark数据帧(Java)中的列?

如何根据列的长度减少/过滤Spark数据帧(Java)中的列?,java,apache-spark,cassandra,connector,Java,Apache Spark,Cassandra,Connector,将Spark 1.5.1与Spark cassandra connector java和Spark SQL DataFrame API结合使用,筛选出小于或大于给定长度的字符串列的最佳方法是什么 我正试着做这样的事情 DataFrame df = context.sql("select key from mytable where key is not null") DataFrame fdf = df.filter(functions.length(df.col("key").gt(10)))

将Spark 1.5.1与Spark cassandra connector java和Spark SQL DataFrame API结合使用,筛选出小于或大于给定长度的字符串列的最佳方法是什么

我正试着做这样的事情

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(Column)api是如何工作的?它接受一列并返回一列,但长度会发生什么变化

1)列是您需要应用谓词的对象。所以改变括号

DataFrame fdf = df
 .filter(
   functions.length(df.col("key"))
   .gt(10)
)
这样做的目的是基于列键应用谓词。首先,我们将列键更改为长度为(key)的列。基本上将函数应用于列中的所有值

[ "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的所有值,谢谢。这很有帮助。我在[link]{}上参考了DataStax文档,没有看到这里列出的LENGTH关键字/函数。这两种方法都有效,但我已经简化了本文的示例,因此我需要使用的是带有过滤器函数的示例。