数据帧:如何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() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |