火花斯卡拉数据帧错误

Posted

技术标签:

【中文标题】火花斯卡拉数据帧错误【英文标题】: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)

请帮忙。

【问题讨论】:

【参考方案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 条件下直接

【讨论】:

以上是关于火花斯卡拉数据帧错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在文本文件中保存 rdd 操作?斯卡拉/火花

将火花数据帧写入镶木地板格式时出现内存不足错误

限制火花数据帧的数据

sql 斯卡拉火花创建-databases.sql

sql 斯卡拉火花-SQL totalrevenuedaily.sql

如何加入 DataFrames 的地图?斯卡拉火花