2016-05-18 9 views
5

मैं लर्निंग स्पार्क पुस्तक पढ़ रहा हूं और निम्नलिखित जोड़ी rdd परिवर्तन को समझ नहीं पाया।स्पार्क: FlatMapValues ​​क्वेरी

rdd.flatMapValues(x => (x to 5)) 

यह एक RDD {(1,2),(3,4),(3,6)} पर लागू किया जाता है और परिवर्तन के उत्पादन में {(1,2),(1,3),(1,4),(1,5),(3,4),(3,5)}

कोई यह समझाने कृपया है।

उत्तर

14

दिए गए आरडीडी से शुरू करते हैं।

val sampleRDD = sc.parallelize(Array((1,2),(3,4),(3,6))) 

अब, flatMapValues विधि flatMap और mapValues का एक संयोजन है।

क्या mapValues करता है कि यह कुंजी रखने के दौरान मूल्यों को मानचित्र करता है। उदाहरण,

अगर आप sampleRDD.mapValues(x => x to 5) करते हैं, तो यह आपको

Array((1,Range(2, 3, 4, 5)), (3,Range(4, 5)), (3,Range())) 

नोटिस यहाँ दे देंगे कि कुंजी-मान पेयर (3, 6) के लिए, यह पैदा करता है (3,Range())6 to 5 does not produce a non-empty collection of values. के बाद से

क्या flatMap करता है यह "टूट जाता है संग्रह के तत्वों में संग्रह "नीचे। आप here और here जैसे फ्लैटमैप ऑनलाइन के अधिक सटीक विवरण की खोज कर सकते हैं।

उदाहरण के लिए,

दिया val rdd2 = sampleRDD.mapValues(x => x to 5), अगर हम करते हैं rdd2.flatMap(x => x), आप

Array((1,2),(1,3),(1,4),(1,5),(3,4),(3,5)). 

है कि मिल जाएगा, प्रत्येक कुंजी में संग्रह में प्रत्येक तत्व के लिए, हम एक (key, element) जोड़ी बना सकते हैं।

यह भी ध्यान दें कि (3, Range()) कोई अतिरिक्त कुंजी तत्व जोड़ी उत्पन्न नहीं करता है क्योंकि अनुक्रम खाली है।

अब flatMap और mapValues संयोजन, आपको flatMapValues मिलते हैं।

+1

ग्रेट स्पष्टीकरण। बहुत उपयोगी। – maddie

4

faltMapValues ​​कुंजी से जुड़े प्रत्येक मान पर काम करता है। उपर्युक्त मामले में {x से 5} का अर्थ है कि प्रत्येक मान 5 तक बढ़ाया जाएगा।

पहली जोड़ी लेना जहां आपके पास {1,2} है, यहां कुंजी 1 है और मान 2 है इसलिए रूपांतरण लागू करने के बाद यह बन जाएगा (1,2), (1,3), (1,4), (1,5)।

उम्मीद है कि इससे मदद मिलती है।