2017-08-15 115 views
-2

我在Spark 1.6中有一個下面的數據框,我想在下面的數據框過濾器裏面使用過濾器變量,但是出現錯誤。spark scala DataFrame error

val df = sc.parallelize(Seq(
("None", "a", "b"), ("c", "None", "d"), ("e", "f", "None"), ("g", "h", "i"))).toDF("A", "B", "C") 

val fil = """($"A" !== "None") && ($"B" !== "None") && ($"C" !== "None")""" 

當我運行這個

df.where(fil).show 

我收到此錯誤:

java.lang.RuntimeException: [1.2] failure: identifier expected 

    ($"A" !== "None") && ($"B" !== "None") && ($"C" !== "None") 
    ^
      at scala.sys.package$.error(package.scala:27) 
      at org.apache.spark.sql.catalyst.SqlParser$.parseExpression(SqlParser.scala:49) 
      at org.apache.spark.sql.DataFrame.where(DataFrame.scala:806) 

請幫助。

回答

0

使用任何適當的SQL:

val fil = """A != "None" AND B != "None" AND C != "None"""" 

或DSL(2.X)

val fil = ($"A" =!= "None") && ($"B" =!= "None") && ($"C" =!= "None") 

(1.x中):

val fil = ($"A" !== "None") && ($"B" !== "None") && ($"C" !== "None") 
+0

當我做到這一點VAL FIL =($ 「A」=!=「None」)&&($「B」=!=「None」)&&($「C」=!=「None」)fil將是org.apache.spark.sql.Column類型它的工作原理,但是當我有一個字符串hwo將其轉換爲org.apache.spark.sql.Column,以便我可以在數據幀篩選器中使用它。感謝您的答覆 – rubiks

0

這個 「」 「($」 ($「C」!==「None」)&($「C」!==「None」) 「」在Where條件中被替換爲字符串。

您可以創建列名的順序,並在那裏的條件直接引用一樣, columns.head這些列==「無」!在那裏的條件直接