如何根据列的长度减少/过滤Spark数据帧(Java)中的列?
将Spark 1.5.1与Spark cassandra connector java和Spark SQL DataFrame API结合使用,筛选出小于或大于给定长度的字符串列的最佳方法是什么 我正试着做这样的事情如何根据列的长度减少/过滤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)))
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关键字/函数。这两种方法都有效,但我已经简化了本文的示例,因此我需要使用的是带有过滤器函数的示例。