将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,但是长度会怎样?
答案 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的所有值