Scala 如何使用reduce函数而不是groupby来聚合数据帧上多列的总和?

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

如何使用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
转换为
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列。