开发者社区> 问答> 正文

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

社区小助手 2019-01-02 15:21:10 861

我有以下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

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

分布式计算 Spark
分享到
取消 提交回答
全部回答(2)
  • 天然而就
    2019-09-04 10:19:29

    也可以注册成表,使用sparksql写sql做这个

    0 0
  • 社区小助手
    2019-07-17 23:24:26

    这样做的方法是使用聚合函数。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语法。

    0 0
添加回答
+ 订阅

大数据计算实践乐园,近距离学习前沿技术

推荐文章
相似问题
推荐课程