【问题标题】:DataFrame error: "overloaded method value filter with alternatives"DataFrame 错误:“使用替代方法重载方法值过滤器”
【发布时间】:2016-09-17 00:34:34
【问题描述】:

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

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()
                                 ^

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

【问题讨论】:

    标签: scala apache-spark dataframe


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 我尝试使用 !== 但它不起作用(说它已弃用),并建议改用 =!=。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2017-08-04
    • 2019-07-10
    相关资源
    最近更新 更多