火花斯卡拉数据帧错误
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 条件下直接
【讨论】:
以上是关于火花斯卡拉数据帧错误的主要内容,如果未能解决你的问题,请参考以下文章