2017-05-28 2 views
0

私は非常に簡単な操作をしたいです。 {1,2,3,4,5}、{6,7,8,9,10}の2つのベクトル間の加算を実現する必要があります。ベクトル{7,9,11,13、 15}。 2つのベクトルは、自分のコードで2つのRDD [Int]で表されます。2つのRDD [Int]の対応する要素を合計する方法は?

val v1 = sc.parallelize(List(1,2,3,4,5)) 
val v2 = sc.parallelize(List(6,7,8,9,10)) 

私は、私は別のものをマッピングすることだし、このために、私はこのような単純な動作を実現する方法の見当がつかないとき、私はRDDを閲覧することができないことを知っています。 どうすればいいですか?

答えて

2

TL; DRzipオペレータを使用してください。

引用RDD.zip

ジップ[U](その他:RDD [U])(暗黙arg0に:ClassTag [U]):RDD [(T、U)]ジッパー相互このRDD次のように一つは、あなたのケースでは

など、各RDDの最初の要素、各RDDの2番目の要素をキーと値のペアを返す、それはなるだろう:

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 
ボーナスとして

、次のような簡単な操作(foreach(println)等)になりますスパークSQLを検討してください。(!)

val sums = zipped.map { case (x, y) => x + y }.toDF("sum") 
scala> sums.show 
+---+ 
|sum| 
+---+ 
| 7| 
| 9| 
| 11| 
| 13| 
| 15| 
+---+ 

そして、あなたは "無料で" 仕分けガット

1

あなたの2 RDDのサイズが同じであるとすると、次のようになります。

val res: RDD[Int] = v1.zip(v2).map { case (a, b) => a + b } 
関連する問題