如何根据列的长度 reduce/filter Spark DataFrame (Java) 中的列?

How to reduce/filter a Column in a Spark DataFrame (Java) based on the length of the Column?

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

我正在尝试做这样的事情

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 in 和 returns 一个 Column,但是长度会发生什么变化?

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

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

这样做是基于列 Key 应用谓词。首先我们把column key改成Length(key)的column。基本上将该函数应用于列中的所有值

[ "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")

获取key长度大于10的所有值