2016-07-17 11 views
8

मैं इन सेटिंग्स (दूसरों के बीच) के साथ एक चिंगारी काम शुरू किया:"एन कार्य (XXXX एमबी) के धारावाहिक परिणाम" pyspark में `spark.driver.memory` से अधिक होने के लिए क्यों संभव है?

spark.driver.maxResultSize 11GB 
spark.driver.memory   12GB 

मैं अपने pyspark काम डिबगिंग था, और यह मुझे त्रुटि दे रखा:

serialized results of 16 tasks (17.4 GB) is bigger than spark.driver.maxResultSize (11 GB) 

तो, मैं spark.driver.maxResultSize वृद्धि हुई कॉन्फ़िगरेशन सेटिंग्स में 18 G पर। और, यह काम किया !!

अब, यह दिलचस्प है क्योंकि दोनों मामलों में spark.driver.memorySMALER क्रमबद्ध परिणामों के मुकाबले वापस आया था।

इसकी अनुमति क्यों है? मुझे लगता है कि यह संभव नहीं है क्योंकि धारावाहिक परिणाम थे जब मैं डिबगिंग कर रहा था, जो चालक के आकार से अधिक है, जो ऊपर दिखाए गए अनुसार 12 GB है?

यह कैसे संभव है?

+0

बस उत्सुक - डाउनवोट क्यों? – simple

उत्तर

0

मेरी समझ यह है कि जब हम स्पार्क से कोई कार्रवाई करने के लिए कहते हैं, तो सभी विभाजनों के परिणाम क्रमबद्ध होते हैं, लेकिन इन परिणामों को ड्राइवर को नहीं भेजा जाना चाहिए, जब तक कि collect() जैसे कुछ ऑपरेशन नहीं किए जाते हैं।

spark.driver.maxResultSize सभी विभाजनों के क्रमबद्ध परिणामों के कुल आकार पर एक सीमा को परिभाषित करता है & वास्तविक spark.driver.memory से स्वतंत्र है। इसलिए, आपके spark.driver.memory आपके spark.driver.maxResultSize से कम हो सकते हैं और आपका कोड अभी भी काम करेगा।

यदि आप हमें इस प्रक्रिया या आपके कोड स्निपेट में उपयोग किए गए परिवर्तनों और कार्यों को बताते हैं तो हम शायद एक बेहतर विचार प्राप्त कर सकते हैं।

1

यह संभव है क्योंकि spark.driver.memory कॉन्फ़िगर JVM ड्राइवर प्रक्रिया नहीं पायथन दुभाषिया और उन दोनों के बीच डेटा स्मृति में सभी डेटा रखने के लिए की जरूरत नहीं है सॉकेट और ड्राइवर की प्रक्रिया के साथ स्थानांतरित कर रहा है (स्थानीय संरचना में कनवर्ट न करें)।

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