Spark 1.4.1
我遇到一种情况,即按数据帧分组,然后对“计数”列进行计数和过滤会引发以下异常
import sqlContext.implicits._
import org.apache.spark.sql._
case class Paf(x:Int)
val myData = Seq(Paf(2), Paf(1), Paf(2))
val df = sc.parallelize(myData, 2).toDF()
然后分组和过滤:
df.groupBy("x").count()
.filter("count >= 2")
.show()
抛出异常:
java.lang.RuntimeException: [1.7] failure: ``('' expected but `>=' found count >= 2
解决方案:
重命名列使问题消失(因为我怀疑与插值的“计数”函数没有冲突”
df.groupBy("x").count()
.withColumnRenamed("count", "n")
.filter("n >= 2")
.show()
那么,这是一种预期的行为、一个错误还是有一个规范的方法可以解决?
谢谢,亚历克斯
最佳答案
当您将字符串传递给 filter
函数时,该字符串将被解释为 SQL。 Count 是一个 SQL 关键字,使用 count
作为变量会使解析器感到困惑。这是一个小错误(如果需要,您可以提交 JIRA 票证)。
您可以通过使用列表达式而不是字符串轻松避免这种情况:
df.groupBy("x").count()
.filter($"count" >= 2)
.show()
关于scala - 数据帧 : how to groupBy/count then filter on count in Scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32119936/