2014-11-13 12 views
17

द्वारा गठबंधन करने के लिए उपयोग किया जाता है, मान लें कि मेरे पास निम्न कुंजी-जोड़ी मानों के साथ निम्नलिखित दो आरडीडी हैं।स्पार्क में कौन सा फ़ंक्शन दो आरडीडी को कुंजी

rdd1 = [ (key1, [value1, value2]), (key2, [value3, value4]) ] 

और

rdd2 = [ (key1, [value5, value6]), (key2, [value7]) ] 
अब

, मैं उन्हें, कुंजी मान से शामिल होने के लिए तो उदाहरण के लिए मैं निम्नलिखित

ret = [ (key1, [value1, value2, value5, value6]), (key2, [value3, value4, value7]) ] 

वापस जाने के लिए मुझे लगता है मैं यह कैसे कर सकते चाहते हैं, में चाहते हैं पायथन या स्कैला का उपयोग कर स्पार्क? एक तरीका है शामिल होने का उपयोग करना, लेकिन जुड़ना टुपल के अंदर एक ट्यूपल बना देगा। लेकिन मैं प्रति कुंजी मूल्य जोड़ी केवल एक ट्यूपल करना चाहता हूं।

उत्तर

7

मैं दो आरडीडी संघों को कम करता हूं और मूल्यों को मर्ज करने के लिए बाईकी को कम करता हूं।

(rdd1 union rdd2).reduceByKey(_ ++ _) 
+0

काम नहीं करता है। 'संघ' ज्ञात नहीं है। – nottinhill

+0

@SirBenBenji वह शायद rdd1.union (rdd2) मतलब था? – Sai

+0

@ साईं वही बात, है ना? सुनिश्चित नहीं है कि "नहीं मिला" – maasg

7

बस join और उसके बाद map परिणामी rdd का उपयोग करें।

rdd1.join(rdd2).map(case (k, (ls, rs)) => (k, ls ++ rs)) 
+0

मेरे पास कुल योग और संख्याओं का एक बड़ा हिस्सा है। औसत बनाने के लिए मैं एक ही कुंजी से उनसे कैसे जुड़ूं। संभावना के लिए खोलें मैं इसे गलत कर रहा हूँ। –

+1

यह एक अलग सवाल होना चाहिए, लेकिन: यदि आपके पास 'मान हैं: आरडीडी [(के, फ्लोट)] 'और' गणना: आरडीडी [(के, इंट)] '(यदि वे नहीं हैं तो उन्हें इस आकार में मानचित्र करें) तो आप 'आरडीडी [(के, (फ्लोट, इंट)) प्राप्त करने के लिए 'value.join (गणना)' कर सकते हैं,' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'है। इसके लिए पहले से ही कार्य करें, लेकिन कठिन तरीका 'कम {केस ((v1, count1), (v2, count2)) => ((v1 * count1 + v2 * count2)/(count1 + count2) है, (count1 + count2))} 'मेरा गणित मानना ​​सही है। – lmm

+0

हाँ यह समाधान है जो समाप्त हो गया है। धन्यवाद! –

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