2017-03-08 6 views
1

Ich habe zwei RDDs mit Struktur folgendeFügen Sie jedes Element einer RDD zu jedem Element einer anderen RDD in Spark Scala hinzu.

org.apache.spark.rdd.RDD[(Long, Double)] 

Hier jede Reihe von RDD Double einen Index Long und einen Wert enthält. Ich möchte jedes Element einer RDD zu jedem Element der anderen RDD in Spark Scala hinzufügen.

Ein Beispiel würde wie folgt aussehen:

RDD1:

Array[(Long, Double)] = Array((0,-3),(1,2)) 

RDD2:

Array[(Long, Double)] = Array((0,4),(1,-2)) 

Ergebnis:

Array[(Long, Double)] = Array((0,1),(0,-5),(1,6),(1,0)) 

Antwort

1

zu berechnen, was Sie wirklich tun hier ein kartesisches Produkt Ihrer zwei rdd ‚s, wo man einfach die Werte jede Summe ((key, value), (key, value)) Paar führt, die Schlüssel des ersten Tupels zu halten: wenn

val result = rdd1.cartesian(rdd2).map(x => (x._1._1, x._2._2 + x._1._2)) 
// Result 
result.collect() 
Array[(Int, Int)] = Array((0,1), (0,-5), (1,6), (1,0)) 

Seien Sie vorsichtig mit cartesian(), Speicherverbrauch wird dramatisch erhöhen, je größer Ihre rdd ist.

0

Bitte, versuchen Sie dies:

val df1 = Seq((0,-3),(1,2)).toDF("col1", "col2") 
val df2 = Seq((0,4),(1,-2)).toDF("col1", "col2") 

df1.createOrReplaceTempView("temp1") 
df2.createOrReplaceTempView("temp2") 

spark.sql("SELECT t1.col1 + t2.col1, t1.col2 + t2.col2 FROM t1, t2").show 
0

zip die beiden RDDs und dann über die Karte, die Beträge

Verwandte Themen