2015-06-22 11 views
6

मान लीजिएपाइथन के साथ स्पार्क में दो आरडीडी कैसे जुड़ें?

rdd1 = ((a, 1), (a, 2), (b, 1)), 
rdd2 = ((a, ?), (a, *), (c, .)). 

((a, (1, ?)), (a, (1, *)), (a, (2, ?)), (a, (2, *))). 

कोई आसान तरीकों उत्पन्न करने के लिए करना चाहते हैं? मुझे लगता है कि यह क्रॉस में शामिल होने से अलग है लेकिन एक अच्छा समाधान नहीं मिल रहा है। मेरे समाधान

(rdd1 
.cartesian(rdd2) 
.filter(lambda (k, v): k[0]==v[0]) 
.map(lambda (k, v): (k[0], (k[1], v[1])))) 
+1

जो आपने वर्णित किया वह वास्तव में एक प्राकृतिक जुड़ाव है। क्रॉस जॉइन बस एक कार्टेशियन उत्पाद है। – zero323

उत्तर

11

आप सिर्फ एक सरल में शामिल होने, उदा की तलाश कर रहे है

rdd = sc.parallelize([("red",20),("red",30),("blue", 100)]) 
rdd2 = sc.parallelize([("red",40),("red",50),("yellow", 10000)]) 
rdd.join(rdd2).collect() 
# Gives [('red', (20, 40)), ('red', (20, 50)), ('red', (30, 40)), ('red', (30, 50))] 
+0

यह वास्तव में सहायक है। धन्यवाद। –

संबंधित मुद्दे