加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

数据帧:如何groupBy / count然后过滤Scala中的计数

发布时间:2020-12-16 09:01:55 所属栏目:安全 来源:网络整理
导读:火花1.4.1 我遇到一个情况,通过数据框进行分组,然后对’count’列进行计数和过滤会引发下面的异常 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
火花1.4.1

我遇到一个情况,通过数据框进行分组,然后对’count’列进行计数和过滤会引发下面的异常

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()

那么,这是一种期待的行为,一个错误还是有规范的方式呢?

谢谢,亚历克斯

解决方法

当您将一个字符串传递给过滤器函数时,该字符串将被解释为SQL. Count是一个SQL关键字,将count作为变量混淆解析器.这是一个小错误(如果您想要的话,您可以提交JIRA票证).

您可以通过使用列表达式而不是字符串来轻松避免这种情况:

df.groupBy("x").count()
  .filter($"count" >= 2)
  .show()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读