2016-03-04 9 views
5

मान लीजिए मैं बनाने के इस तरह के एक RDD (मैं Pyspark उपयोग कर रहा हूँ):स्पार्क कैसे तय करता है कि आरडीडी को कैसे विभाजित किया जाए?

list_rdd = sc.parallelize(xrange(0, 20, 2), 6) 

तो मैं glom() विधि के साथ विभाजित तत्वों प्रिंट और प्राप्त

[[0], [2, 4], [6, 8], [10], [12, 14], [16, 18]] 

कैसे स्पार्क का फैसला किया है कैसे विभाजन मेरी सूची? तत्वों की उस विशिष्ट पसंद कहां से आती है? 6 अनुरोधित विभाजन बनाने के लिए, यह कुछ अलग-अलग तत्वों को 0 और 10 से अलग छोड़कर अलग-अलग जोड़ सकता था। दूसरे भाग में, विभाजन समान हैं। मैं

list_rdd = sc.parallelize(xrange(0, 10, 2), 6) 
[[], [0], [2], [4], [6], [8]] 

मिल

list_rdd = sc.parallelize(xrange(0, 30, 2), 6) 
[[0, 2], [4, 6, 8], [10, 12], [14, 16, 18], [20, 22], [24, 26, 28]] 

9 तत्वों की एक छोटी श्रेणी का उपयोग करना:

एक बड़ी रेंज का उपयोग करना, 29 के साथ तत्वों, मैं तीन तत्वों द्वारा पीछा 2 तत्वों के पैटर्न में विभाजन मिल तो क्या मैं यह अनुमान लगा कि स्पार्क एक विन्यास जहां छोटी संभव बड़ा संग्रह द्वारा पीछा किया जाता है, और बार-बार में सूची विभाजित करके विभाजन पैदा कर रहा है है।

सवाल यह है कि अगर इस विकल्प के पीछे कोई कारण है, जो बहुत ही सुरुचिपूर्ण है, लेकिन क्या यह प्रदर्शन लाभ भी प्रदान करता है?

उत्तर

2

जब तक आप एक विशिष्ट विभाजनकर्ता निर्दिष्ट नहीं करते हैं, तो यह "यादृच्छिक" है कि यह उस आरडीडी के विशिष्ट कार्यान्वयन पर निर्भर करता है। इस मामले में आप आगे इसे में खुदाई करने के लिए ParallelCollectionsRDD जा सकते हैं।

getPartitions परिभाषित किया गया है के रूप में:

val slices = ParallelCollectionRDD.slice(data, numSlices).toArray 
slices.indices.map(i => new ParallelCollectionPartition(id, i, slices(i))).toArray 

जहां slice के रूप में टिप्पणी की है (बेहतर फिट करने के लिए पुन: स्वरूपित):

/** 
* Slice a collection into numSlices sub-collections. 
* One extra thing we do here is to treat Range collections specially, 
* encoding the slices as other Ranges to minimize memory cost. 
* This makes it efficient to run Spark over RDDs representing large sets of numbers. 
* And if the collection is an inclusive Range, 
* we use inclusive range for the last slice. 
*/ 

नोट स्मृति के संबंध में कुछ बातों को देखते हैं कि। तो, फिर से, यह कार्यान्वयन के लिए विशिष्ट होने जा रहा है।

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