【问题标题】:spark scala DataFrame error火花斯卡拉数据帧错误
【发布时间】:2017-08-15 18:02:09
【问题描述】:

我在 Spark 1.6 中有一个以下数据框,我想在数据框过滤器中使用过滤器变量,如下所示,但出现错误。

 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)

请帮忙。

【问题讨论】:

    标签: apache-spark apache-spark-sql spark-dataframe


    【解决方案1】:

    使用适当的 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")
    

    【讨论】:

    • 当我这样做时 val fil = ($"A" =!= "None") && ($"B" =!= "None") && ($"C" =!= " None") fil 将是 org.apache.spark.sql.Column 类型它可以工作,但是当我有一个字符串 hwo 将其转换为 org.apache.spark.sql.Column 以便我可以在数据框过滤器中使用它时.感谢您的回复
    【解决方案2】:

    这个 """($"A" !== "None") && ($"B" !== "None") && ($"C" !== "None")"""替换为 Where 条件中的字符串。

    您可以创建列名序列并直接在 where 条件中引用这些列,例如, columns.head !== "None:" 在 where 条件下直接

    【讨论】:

      猜你喜欢
      • 2017-08-22
      • 1970-01-01
      • 2020-11-05
      • 2016-04-27
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 2017-03-16
      • 2017-11-05
      相关资源
      最近更新 更多