【问题标题】:Spark - Applying filter/map on a Dataframe using column names not workingSpark - 使用列名在数据框上应用过滤器/映射不起作用
【发布时间】:2018-04-04 14:23:06
【问题描述】:

对不起,如果这是重复的,但是,指出的解决方案对我不起作用。很可能我在这里遗漏了一些基本的东西。我有一个如下的数据框:

inputDF: org.apache.spark.sql.DataFrame = [ts: string, id: string ... 20 more fields]

我正在尝试通过执行以下操作(在 Scala 中)根据称为“状态”(字符串类型)的字段过滤此处感兴趣的一些“行”:

inputDF.filter(inputDF("state") == "BALANCED").show()

但是这给了我一个错误:

<console>:143: error: overloaded method value filter with alternatives:
  (func: org.apache.spark.api.java.function.FilterFunction[org.apache.spark.sql.Row])org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] <and>
  (func: org.apache.spark.sql.Row => Boolean)org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] <and>
  (conditionExpr: String)org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] <and>
  (condition: org.apache.spark.sql.Column)org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]
 cannot be applied to (Boolean)
       inputDF.filter(inputDF("connState") == "BALANCED").show()

有人可以指出这里有什么不正确的地方吗?我遵循了几个例子,包括https://rklicksolutions.wordpress.com/2016/03/03/tutorial-spark-1-6-sql-and-dataframe-operations/ 中的例子,但不知道出了什么问题。

【问题讨论】:

    标签: apache-spark dataset spark-dataframe


    【解决方案1】:

    看来我需要使用 === 而不是 ==

    inputDF.filter(inputDF("state") === "BALANCED").show()
    

    正在做我想做的事。

    【讨论】:

    • 因为inputDF("state") 返回一个org.apache.spark.sql.Column 并且== 没有为Column 数据类型定义。 === 被定义为检查是否相等。
    • 同意 S.K.此外,如果您想避免冗长并一遍又一遍地重写“inputDF”,请考虑使用以下符号 -> inputDF.flter( $"state" === "BALANCED").show()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 2022-12-03
    • 2014-04-22
    • 2011-05-11
    • 1970-01-01
    • 2020-05-31
    相关资源
    最近更新 更多