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

时间:2016-07-11 17:38:07

标签: java apache-spark cassandra connector

将Spark 1.5.1与spark-cassandra-connector-java和Spark SQL DataFrame apis一起使用,筛选出小于或大于给定长度的String列的最佳方法是什么?

我正在尝试做这样的事情

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是如何工作的?它需要一个Column并返回一个Column,但是长度会怎样?

1 个答案:

答案 0 :(得分: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的所有值