2017-08-15 159 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这些列==“无”!在那里的条件直接