Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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 如何对两个RDD[Int]的对应元素求和?_Scala_Apache Spark - Fatal编程技术网

Scala 如何对两个RDD[Int]的对应元素求和?

Scala 如何对两个RDD[Int]的对应元素求和?,scala,apache-spark,Scala,Apache Spark,我想做一个非常简单的操作。 我需要实现两个向量之间的加法,对于{1,2,3,4,5},{6,7,8,9,10},我想得到向量{7,9,11,13,15}。 这两个向量在我的代码中由两个RDD[Int]表示 val v1 = sc.parallelize(List(1,2,3,4,5)) val v2 = sc.parallelize(List(6,7,8,9,10)) 我知道在映射另一个RDD时无法浏览RDD,因此我不知道如何实现如此简单的操作。 我怎样才能继续;DR使用zip操作员 引述:

我想做一个非常简单的操作。 我需要实现两个向量之间的加法,对于{1,2,3,4,5},{6,7,8,9,10},我想得到向量{7,9,11,13,15}。 这两个向量在我的代码中由两个RDD[Int]表示

val v1 = sc.parallelize(List(1,2,3,4,5))
val v2 = sc.parallelize(List(6,7,8,9,10))
我知道在映射另一个RDD时无法浏览RDD,因此我不知道如何实现如此简单的操作。
我怎样才能继续;DR使用
zip
操作员

引述:

zip[U](其他:RDD[U])(隐式arg0:ClassTag[U]):RDD[(T,U)]将此RDD与另一个RDD进行压缩,返回键值对,每个RDD中的第一个元素,每个RDD中的第二个元素,等等

在您的情况下,它将如下所示:

val zipped = v1 zip v2 // <-- you may want to use v1.zip(v2) instead to keep types
zipped.map { case (x, y) => x + y }    
scala> zipped.map { case (x, y) => x + y }.foreach(println)
11
13
9
15
7
val sums = zipped.map { case (x, y) => x + y }.toDF("sum")
scala> sums.show
+---+
|sum|
+---+
|  7|
|  9|
| 11|
| 13|
| 15|
+---+

而且你还有“免费”排序(!)

TL;DR使用
zip
操作员

引述:

zip[U](其他:RDD[U])(隐式arg0:ClassTag[U]):RDD[(T,U)]将此RDD与另一个RDD进行压缩,返回键值对,每个RDD中的第一个元素,每个RDD中的第二个元素,等等

在您的情况下,它将如下所示:

val zipped = v1 zip v2 // <-- you may want to use v1.zip(v2) instead to keep types
zipped.map { case (x, y) => x + y }    
scala> zipped.map { case (x, y) => x + y }.foreach(println)
11
13
9
15
7
val sums = zipped.map { case (x, y) => x + y }.toDF("sum")
scala> sums.show
+---+
|sum|
+---+
|  7|
|  9|
| 11|
| 13|
| 15|
+---+

您已经获得了“免费”排序(!)

假设您的2个
RDD
大小相同,您可以执行以下操作:

val res: RDD[Int] = v1.zip(v2).map { case (a, b) => a + b }

假设您的2
RDD
s具有相同的大小,您可以执行以下操作:

val res: RDD[Int] = v1.zip(v2).map { case (a, b) => a + b }