2015-10-01 5 views
6

मैं के साथ लेखन का परीक्षण तुलना में बहुत धीमी:partitionBy स्पार्क के बिना यह

df.write.partitionBy("id", "name") 
    .mode(SaveMode.Append) 
    .parquet(filePath) 

लेकिन अगर मैं विभाजन बाहर छोड़: तेजी से

df.write 
    .mode(SaveMode.Append) 
    .parquet(filePath) 

यह 100x कार्यान्वित (!)।

क्या विभाजन के दौरान लिखने के लिए डेटा की मात्रा में 100x अधिक समय लगाना सामान्य है?

क्रमशः 10 और 3000 अद्वितीय id और name कॉलम मान हैं। DataFrame में 10 अतिरिक्त पूर्णांक कॉलम हैं।

+0

क्या यह एक शफल का कारण बनता है? – Gillespie

+0

कितना डेटा शामिल है? इसे विभाजित करने के लिए मजबूर करने से पहले यह सब एक विभाजन पर फिट हो सकता है। –

+0

@ गिलेस्पी मैं कैसे पता लगा सकता हूं? इस परीक्षण के लिए – BAR

उत्तर

1

पहला कोड स्निपेट फाइल सिस्टम (स्थानीय या एचडीएफएस) में प्रति विभाजन एक लकड़ी की छत फ़ाइल लिख देगा। इसका मतलब है कि यदि आपके पास 10 विशिष्ट आईडी और 3000 अलग-अलग नाम हैं तो यह कोड 30000 फाइलें बनाएगा। मुझे संदेह है कि फाइलें बनाने, ओवरक्वाइड मेटाडाटा, आदि लिखने का ओवरहेड काफी बड़ा है (शफल करने के अलावा)।

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

+0

क्या आपका मतलब है कि लकड़ी का सबसे अच्छा डीबी भंडारण नहीं है? मैं प्रदर्शन परीक्षण के लिए पोस्टग्रेस में जेडीबीसी स्थापित कर रहा हूं। मुझे नहीं लगता कि डेटा को स्मृति में फिट होना है .. क्या वह स्पार्क के पीछे बिंदु नहीं है? – BAR

+0

लकड़ी की छत फ़ाइल प्रारूप वास्तव में काफी अच्छा है, हालांकि यदि नौकरी के लिए स्पार्क सही उपकरण है तो आपके उपयोग-मामले पर भारी निर्भर करता है। स्पार्क को बड़ी मात्रा में डेटा की समानांतर प्रसंस्करण के लिए अनुकूलित किया गया है। यदि आपके पास डेटा के कुछ या 100 गीगाबाइट डेटा हैं, तो पोस्टग्रेस्क्ल जैसे डेटाबेस शायद बेहतर विकल्प होंगे। हालांकि आपके उपयोग के मामले को जानने के बिना किसी भी सिफारिश को देना मुश्किल है। – kostya

+0

कुछ लोगों द्वारा डेटा के पीबी को संभालने के लिए स्पार्क का उपयोग किया जा रहा है। मेरा मानना ​​है कि स्पार्क जेडीबीसी समेत समांतर में किसी भी समर्थित स्रोत से डेटा संसाधित करने में सक्षम है। मेरे पास प्रक्रिया के लिए लगभग 250 जीबी है जिसे समानांतर में चलाने के लिए लगभग 1 जीबी आकार में फाइलों में विभाजित किया जा सकता है। – BAR

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