2016-07-11 153 views
-1

Spark-cassandra-connector-java和Spark SQL DataFrame apis中使用Spark 1.5.1,篩選出長度小於或大於給定長度的字符串列的最佳方法是什麼?如何根據列的長度減少/過濾Spark DataFrame(Java)中的列?

我試圖做這樣的事情

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並返回一個Column,但是長度會發生什麼?

回答

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

+0

謝謝。這非常有幫助。我在這個[link] {https://docs.datastax.com/en/datastax_enterprise/4.8/datastax_enterprise/spark/sparkSqlSupportedSyntax.html}處提到了DataStax文檔,並沒有看到那裏列出的LENGTH關鍵字/函數。兩種方法都可以工作,但我已經簡化了這篇文章的例子,所以我需要使用的是帶有過濾器功能的例子。 – Joe