[英]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.