scala - 如何使用reduce函数而不是groupby来聚合Dataframe上多列的总和?
问题描述
如何使用reduce函数而不是groupby来聚合Dataframe上多列的总和?因为,groupby sum 花费了很多时间,现在我正在考虑使用 reduce 函数。任何线索都会有所帮助。
Input:
| A | B | C | D |
| x | 1 | 2 | 3 |
| x | 2 | 3 | 4 |
CODE:
dataFrame.groupBy("A").sum()
Output:
| A | B | C | D |
| x | 3 | 5 | 7 |
解决方案
您必须将其转换DataFrame
为RDD
才能执行reduceByKey
操作。
val rows: RDD[Row] = df.rdd
创建 RDD 后,您可以使用 reduceByKey 添加多个列的值
val input = sc.parallelize(List(("X",1,2,3),("X",2,3,4)))
input.map{ case (a, b, c, d) => ((a), (b,c,d)) }.reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2, x._3 + y._3))
spark.createDataFrame(final_rdd).toDF("M","N").select($"M", $"N._1".as("X"), $"N._2".as("Y"),$"N._3".as("Z")).show(10)
+---+---+---+---+
| M| X| Y| Z|
+---+---+---+---+
| X| 3| 5| 7|
+---+---+---+---+
推荐阅读
- spring - RepositoryRestResource 以不同于 RepositoryRestController 的格式返回结果
- javascript - 如何为 NuxtJS 中的资产提供 cdn 链接?
- apache-kafka - Kafka Streams 输出主题可以在单独的集群上吗?
- apache-kafka - Kafka Streams - 定义具有容错能力的自定义关系/Non_Key_Value StateStore
- python - Python - 检测值/字符串列表是日期、时间、日期时间还是两者都不是
- javascript - 我的 JavaScript 代码中缺少什么?它在 WordPress 帖子中不起作用
- heroku - Heroku 构建失败:heroku-prebuild
- api - 从 WebJob 调用 Azure API/WebJob 和 Web api 之间的共享代码
- python - 如何使用具有不同来源和/或形状的多个 mgrid 计算值
- php - CRUD - 创建不起作用