开发者社区> 问答> 正文

如何计算和获取Spark Dataframe中唯一ID的值总和?

我有以下Dataframe,我希望按ID汇总,并为每个唯一ID总和'value'列:

import org.apache.spark.sql.functions._
import spark.implicits._

// some data...
val df = Seq(
(1, 2),
(1, 4),
(1, 1),
(2, 2),
(2, 2),
(3, 2),
(3, 1),
(3, 1)
).toDF("id","value")

df.show()
给出以下内容:

idvalue
12
14
11
22
22
32
31
31

使用计数功能我知道我可以计算唯一的ID:

df.select("id").groupBy($"id").count.orderBy($"id".asc).show()

idcount
13
22
33

但我也希望对每个唯一ID的值求和(或得到平均值)。所以结果表应该如下:

idcountvalueCount
137
224
334

有没有办法以编程方式执行此操作?

展开
收起
社区小助手 2019-01-02 15:21:10 5171 0
2 条回答
写回答
取消 提交回答
  • 也可以注册成表,使用sparksql写sql做这个

    2019-09-04 10:19:29
    赞同 展开评论 打赏
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    这样做的方法是使用聚合函数。Sparks带有许多预定义的(平均值,总和,计数,第一个,收集列表,收集集,最小值,最大值......),所以你可以随时在你的例子中这样做:

    df.groupBy("id").agg(

    count("id").as("countOfIds"), 
    sum("id").as("sumOfIds"), 
    avg("id").as("avgOfIds")
    ).show
    id countOfIds sumOfIds avgOfIds
    1 3 3 1.0
    3 3 9 3.0
    2 2 4 2.0

    您可以通过查看定义为“聚合函数”的函数来查看sql.function包文档中定义的函数。如果您使用面向SQL的语法,所有这些都具有等效的SQL语法。

    2019-07-17 23:24:26
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云HBaseSQL及分析 ——Phoenix&Spark 立即下载
R AND SPARK 立即下载
Spark Autotuning 立即下载