scala - 数据帧 : how to groupBy/count then filter on count in Scala

标签 scala apache-spark apache-spark-sql

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/

相关文章:

django - Spark on YARN - 从 Django 提交 Spark 作业

scala - 如何将 DataFrame 与其自身连接并聚合

python - 如何在 Spark (Python) 中对我的 Row 对象的字段进行排序

scala - 为什么我不能在 Option[List] 上调用 flatMap

scala - 什么时候发生类型删除?

java - 将依赖项添加到 Scala 项目 (sbt)

python - python 和 scala 之间的 zeromq 请求-回复模式

scala - 如何使用 DataFrames 来利用 Cassandra 分区器?

apache-spark - Spark 1.5.1 不适用于配置单元 jdbc 1.2.0

python - 如何提高增量DeltaLake表的合并操作的性能?