Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala SPARK:SPARK RDD中RDD[Array[Int]]中具有相同索引的元素之和_Scala_Apache Spark_Rdd - Fatal编程技术网

Scala SPARK:SPARK RDD中RDD[Array[Int]]中具有相同索引的元素之和

Scala SPARK:SPARK RDD中RDD[Array[Int]]中具有相同索引的元素之和,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,我有三个文件,如: file1: 1,2,3,4,5 6,7,8,9,10 file2: 11,12,13,14,15 16,17,18,19,20 file3: 21,22,23,24,25 26,27,28,29,30 我必须从每个文件中找到行的总和: 1+2+3+4+5 + 11+12+13+14+15 + 21+21+23+24+25 6+7+8+9+10 + 16+17+18+19+20 + 26+27+28+29+30 我在spark

我有三个文件,如:

file1: 1,2,3,4,5
       6,7,8,9,10

file2: 11,12,13,14,15
       16,17,18,19,20

file3: 21,22,23,24,25
       26,27,28,29,30
我必须从每个文件中找到行的总和:

1+2+3+4+5 + 11+12+13+14+15 + 21+21+23+24+25
6+7+8+9+10 + 16+17+18+19+20 + 26+27+28+29+30
我在spark scala中编写了以下代码,以获取所有行的总和数组:

val filesRDD = sc.wholeTextFiles("path to folder\\numbers\\*")

// creating  RDD[Array[String]]
val linesRDD = filesRDD.map(elem => elem._2.split("\\n"))

// creating  RDD[Array[Array[Int]]]
val rdd1 = linesRDD.map(line => line.map(str => str.split(",").map(_.trim.toInt)))

// creating  RDD[Array[Int]]
val rdd2 = rdd1.map(elem => elem.map(e => e.sum))

rdd2.collect.foreach(elem => println(elem.mkString(",")))
我得到的结果是:

15,40
65,90
115,140
我想要的是求和15+65+115和40+90+140

感谢您的帮助

附言: 文件可以有不同的行数,有些行有3行,有些行有4行,可以有任意数量的文件。


我只想使用RDD而不是数据帧来实现这一点。

您可以使用
reduce
来总结数组:

val result = rdd2.reduce((x,y) => (x,y).zipped.map(_ + _))

// result: Array[Int] = Array(195, 270)
如果文件长度不同(例如,文件3只有一行
21,22,23,24,25

谢谢你完美的回答。我只是对不同行数的文件稍微修改了代码。
val result = rdd2.reduce((x,y) => x.zipAll(y,0,0).map{case (a, b) => a + b})