2015-06-25 16 views
22

मैं अपने शोध के लिए स्पार्क 1.4 का उपयोग कर रहा हूं और मेमोरी सेटिंग्स के साथ संघर्ष कर रहा हूं। मेरी मशीन में 16 जीबी मेमोरी है इसलिए मेरी फाइल का आकार केवल 300 एमबी है क्योंकि कोई समस्या नहीं है। हालांकि, जब मैं toPandas() समारोह मैं निम्न त्रुटि प्राप्त का उपयोग कर पांडा dataframe को स्पार्क RDD बदलने की कोशिश:स्पार्क 1.4 बढ़ाएं maxResultSize मेमोरी

serialized results of 9 tasks (1096.9 MB) is bigger than spark.driver.maxResultSize (1024.0 MB) 

मैं इस चिंगारी कॉन्फ़िग फ़ाइल बदल रहा है और अब भी वही त्रुटि हो रही है ठीक करने के लिए कोशिश की। मैंने सुना है कि यह स्पार्क 1.4 के साथ एक समस्या है और यह सोचकर कि क्या आप इसे हल करने के बारे में जानते हैं। किसी भी प्रकार की मदद की बेहद सराहना की जाती है।

उत्तर

32

आप SparkConf वस्तु में spark.driver.maxResultSize पैरामीटर सेट कर सकते हैं:

from pyspark import SparkConf, SparkContext 

# In Jupyter you have to stop the current context first 
sc.stop() 

# Create new config 
conf = (SparkConf() 
    .set("spark.driver.maxResultSize", "2g")) 

# Create new context 
sc = SparkContext(conf=conf) 

आप शायद एक नया SQLContext रूप में अच्छी तरह बनाना चाहिए:

from pyspark.sql import SQLContext 
sqlContext = SQLContext(sc) 
4

ऐसा लगता है कि RDD एकत्रित कर रहे हैं, तो यह निश्चित रूप से होगा सभी डेटा को ड्राइवर नोड में एकत्र करें, यही कारण है कि आप इस समस्या का सामना कर रहे हैं। यदि आपको किसी Rdd के लिए आवश्यक नहीं है, या यदि आवश्यक हो तो आपको डेटा एकत्रित करना होगा, फिर spark.driver.maxResultSize निर्दिष्ट करें। वहाँ इस तरह के pyspark साथ के रूप में कमांड लाइन से इस चर

1 - create Spark Config by setting this variable as
conf.set("spark.driver.maxResultSize", "3g")
2 - or set this variable in spark-defaults.conf file present in conf folder of spark. like spark.driver.maxResultSize 3g and restart the spark.

+0

मैं कॉन्फ़िग फ़ाइल में चर सेट किया था और चिंगारी लेकिन अब भी वही त्रुटि हो रही है को पुनः आरंभ दूर करने के लिए कर सकते हैं। – ahajib

+0

क्या आपने 1 समाधान का प्रयास किया है ?? –

+0

यह मेरे लिए काम करता है, लेकिन यह आपके जैसा उल्लेख किया गया अस्थायी समाधान होना चाहिए;) किसी भी तरह से धन्यवाद –

14

को परिभाषित करने के दो तरीके हैं, --conf spark.driver.maxResultSize=3g भी अधिकतम परिणाम आकार बढ़ाने के लिए इस्तेमाल किया जा सकता।

5

ट्यूनिंग spark.driver.maxResultSize चल रहे वातावरण पर विचार करने का एक अच्छा अभ्यास है। हालांकि, यह आपकी समस्या का समाधान नहीं है क्योंकि डेटा की मात्रा समय-समय पर बदल सकती है। जैसा कि @ ज़िया-कयानी ने उल्लेख किया है, बुद्धिमानी से डेटा एकत्र करना बेहतर है। तो यदि आपके पास डेटाफ्रेम df है, तो आप df.rdd पर कॉल कर सकते हैं और क्लस्टर पर सभी जादू सामग्री कर सकते हैं, ड्राइवर में नहीं। हालांकि, यदि आपको डेटा एकत्र करने की आवश्यकता है, तो मैं सुझाव दूंगा:

  • spark.sql.parquet.binaryAsString चालू न करें। स्ट्रिंग वस्तुओं और अधिक स्थान
  • उपयोग spark.rdd.compress ले RDDs संपीड़ित करने के लिए जब आप उन्हें पृष्ठांकन का उपयोग कर इसे इकट्ठा करने के लिए
  • कोशिश इकट्ठा। (स्काला में कोड, एक और उत्तर Scala: How to get a range of rows in a dataframe से)

    long count = df.count() int limit = 50; while(count > 0){ df1 = df.limit(limit); df1.show(); //will print 50, next 50, etc rows df = df.except(df1); count = count - limit; }

1

वहाँ भी एक स्पार्क बग https://issues.apache.org/jira/browse/SPARK-12837 है कि एक ही त्रुटि देता है

serialized results of X tasks (Y MB) is bigger than spark.driver.maxResultSize 

भी आप ड्राइवर को डेटा खींच नहीं किया जा सकता है, हालांकि है स्पष्ट रूप से।

स्पार्क-12837 स्पार्क बग को संबोधित करता है कि स्पार्क 2 से पहले जमाकर्ता/प्रसारण चर को इस समस्या के कारण अनावश्यक ड्राइवर को खींच लिया गया था।

0

जबकि नौकरी या टर्मिनल शुरू करने, आप

--conf spark.driver.maxResultSize="0" 

का उपयोग टोंटी

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