繁体   English   中英

在不使用 spark.sql() 的情况下在 spark scala 中分组和聚合数据集

[英]Group and aggregate dataset in spark scala without using spark.sql()

我有一个包含客户帐户信息的数据集,如下所示

客户ID 帐户ID 平衡
ID001 ACC001 20
ID002 ACC002 400
ID003 ACC003 500
ID002 ACC004 30

我想 groupby 并聚合上述数据以获得 output 如下所示,而不使用 spark.sql 函数,而是允许使用数据集 API

帐户 账户数量 总余额 平均余额
[ID001,ACC001,20] 1个 20 20
[[ID002,ACC002,400],[ID002,ACC004,30]] 2个 430 215
[ID003,ACC003,500] 1个 500 500

我尝试使用ds.groupBy("accountID").agg(Map("balance" -> "avg")) ,但是我只能使用 Map function 来获取平均值。 需要帮助在不使用 spark sql 函数的情况下进行多重聚合。

感谢任何帮助实现上述解决方案。 谢谢

这是您的解决方案


val cust_data = Seq[(String, String, Int)](
("ID001",   "ACC001",   20),
("ID002",   "ACC002",   400),
("ID003",   "ACC003",   500),
("ID002",   "ACC004",   30)).toDF("customerID", "accountID",    "balance")

val out_df = cust_data.groupBy("customerID").agg(count($"accountID").alias("number_of_accounts"),
                                   sum($"balance").alias("totalBalance"),
                                   avg($"balance").alias("averageBalance"))

                                    
out_df.show()

+----------+------------------+------------+--------------+
|customerID|number_of_accounts|totalBalance|averageBalance|
+----------+------------------+------------+--------------+
|     ID001|                 1|          20|          20.0|
|     ID002|                 2|         430|         215.0|
|     ID003|                 1|         500|         500.0|
+----------+------------------+------------+--------------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM