2016-06-29 13 views
5

परीक्षण करने के लिए कैसे .repartition() काम करता है, मैं निम्नलिखित कोड भाग गया:स्पार्क में समान रूप से पुन: विभाजन कैसे करें?

rdd = sc.parallelize(range(100)) 
rdd.getNumPartitions() 

rdd.getNumPartitions()4 में हुई। तब मैं भाग गया:

rdd = rdd.repartition(10) 
rdd.getNumPartitions() 

rdd.getNumPartitions() इस समय 10 में हुई है, इसलिए वहां अब 10 विभाजन थे।

हालांकि, मैं द्वारा विभाजन की जाँच:

rdd.glom().collect() 

परिणाम 4 गैर खाली सूचियों और 6 खाली सूचियों दे दी है। अन्य 6 सूचियों में कोई तत्व वितरित क्यों नहीं किया गया है?

+0

स्पार्क का कौन सा संस्करण का उपयोग करते हैं से पढ़ा कहना के लिए? – zero323

+0

संस्करण 1.6.1, मुझे विश्वास है। – cshin9

उत्तर

1

पुनरावृत्ति के पीछे एल्गोरिदम() विभाजन में डेटा को पुनर्वितरित करने के सबसे प्रभावी तरीके को अनुकूलित करने के लिए तर्क का उपयोग करता है। इस मामले में, आपकी सीमा बहुत छोटी है और इसे डेटा को वास्तव में आगे तोड़ने के लिए इष्टतम नहीं लगता है। यदि आप 100000 की तरह एक बड़ी रेंज का उपयोग करना चाहते थे, तो आप पाएंगे कि यह वास्तव में डेटा को फिर से वितरित करता है।

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

rdd = sc.parallelize(range(100), 10) 

एक ही बात काम करेगा अगर तुम थे के लिए एक दूसरा तर्क लेता है एक पाठ फ़ाइल

rdd = sc.textFile('path/to/file/, numPartitions) 
संबंधित मुद्दे