Scala 如何使用reduce函数而不是groupby来聚合数据帧上多列的总和?
如何使用reduce函数而不是groupby来聚合数据帧上多列的总和?由于groupby sum占用了很多时间,我现在考虑使用reduce函数。任何线索都会有帮助Scala 如何使用reduce函数而不是groupby来聚合数据帧上多列的总和?,scala,apache-spark,Scala,Apache Spark,如何使用reduce函数而不是groupby来聚合数据帧上多列的总和?由于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转换为RD
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|
+---+---+---+---+
您必须将
DataFrame
转换为RDD
,才能执行reduceByKey
操作。我看起来更像是一个泛型,而不仅仅是3列。我需要一次合计大约300列。