मैं अभी इन दो अवधारणाओं के माध्यम से काम कर रहा हूं और कुछ स्पष्टता चाहूंगा। कमांड लाइन के माध्यम से काम करने से, मैं मतभेदों की पहचान करने की कोशिश कर रहा हूं और जब कोई डेवलपर पुनर्गठन बनाम विभाजन का उपयोग करेगा। है कि partitionBy एक विभाजन समारोह ले जा सकते हैं, या का उपयोग करPyspark: पुनर्गठन बनाम विभाजन
rdd = sc.parallelize([('a', 1), ('a', 2), ('b', 1), ('b', 3), ('c',1), ('ef',5)])
rdd1 = rdd.repartition(4)
rdd2 = rdd.partitionBy(4)
rdd1.glom().collect()
[[('b', 1), ('ef', 5)], [], [], [('a', 1), ('a', 2), ('b', 3), ('c', 1)]]
rdd2.glom().collect()
[[('a', 1), ('a', 2)], [], [('c', 1)], [('b', 1), ('b', 3), ('ef', 5)]]
मैं दोनों के कार्यान्वयन पर एक नज़र ले लिया, और फर्क सिर्फ इतना है कि मैं अधिकांश भाग के लिए ध्यान दिया है:
यहां कुछ नमूना कोड है डिफ़ॉल्ट रूप से portable_hash। तो विभाजन में, सभी एक ही कुंजी एक ही विभाजन में होना चाहिए। पुनरावृत्ति में, मैं अपेक्षा करता हूं कि विभाजन विभाजनों पर अधिक समान रूप से वितरित किए जाएंगे, लेकिन यह मामला नहीं है।
यह देखते हुए, कोई भी पुन: विभाजन का उपयोग क्यों करेगा? मुझे लगता है कि केवल एक बार जब मैं इसे इस्तेमाल कर सकता हूं तो यह है कि अगर मैं पीएआरआरडीडी के साथ काम नहीं कर रहा हूं, या मेरे पास बड़ी डेटा स्कू है?
क्या ऐसा कुछ है जो मुझे याद आ रहा है, या कोई मेरे लिए एक अलग कोण से प्रकाश डाल सकता है?
कारण यह है कि पुनर्विभाजन तत्वों में समान रूप से वितरित नहीं करता है विभाजन भर में क्या ish है? क्या यह एक ऐसा मामला हो सकता है जहां मेरे पास पर्याप्त डेटा न हो, और हम छोटे नमूना आकार के मुद्दे का अनुभव कर रहे हैं? –
अच्छा सवाल, मैं इसे आजमाते समय भी वितरण देख रहा हूं (स्कैला में)। –
@ जोइडेन एक साधारण संभावना से कुछ और नहीं। 'रिपर्टिशन' वास्तव में मौजूदा मानों के लिए यादृच्छिक कुंजी जोड़कर आंतरिक रूप से जोड़ी आरडीडी का उपयोग कर रहा है, इसलिए यह आउटपुट डेटा वितरण के बारे में मजबूत गारंटी प्रदान नहीं करता है। बीटीडब्ल्यू आपको शायद जवाब स्वीकार करना चाहिए। – zero323