DataFrame错误:"重载方法值过滤器,带有替代品"

时间:2016-05-19 22:14:04

标签: scala apache-spark dataframe

我正在尝试通过使用以下代码过滤掉null或空字符串的行来创建新数据框:

val df1 = df.filter(df("fieldA") != "").cache()

然后我收到以下错误:

 <console>:32: error: overloaded method value filter with alternatives:
      (conditionExpr: String)org.apache.spark.sql.DataFrame <and>
      (condition: org.apache.spark.sql.Column)org.apache.spark.sql.DataFrame
     cannot be applied to (Boolean)
                  val df1 = df.filter(df("fieldA") != "").cache()
                                 ^

有谁知道我在这里错过了什么?谢谢!

1 个答案:

答案 0 :(得分:21)

在Scala中,为了按列比较相等,您应该在Spark 2.0 +中使用===!==(或=!=):

val df1 = df.filter(df("fieldA") !== "").cache()

或者,您可以使用表达式:

val df1 = df.filter("fieldA != ''").cache()

您的错误发生是因为每个Scala对象中都存在!=运算符,并且它用于比较对象,始终返回布尔值。但是,filter函数需要Column对象或String中的表达式,因此!==类中有Column运算符,它返回另一个列,然后可以在你想要的方式。

要查看列可用的所有操作,Column scaladoc非常有用。此外,还有functions包。