2016-12-09 21 views
7

के लिए प्रत्येक विभाजन आकार खोजें किसी दिए गए आरडीडी के लिए प्रत्येक विभाजन आकार को खोजने का सबसे अच्छा तरीका क्या है।स्पार्क: आरडीडी

l = builder.rdd.glom().map(len).collect() # get length of each partition 
print('Min Parition Size: ',min(l),'. Max Parition Size: ', max(l),'. Avg Parition Size: ', sum(l)/len(l),'. Total Partitions: ', len(l)) 

यह छोटे RDDs के लिए ठीक काम करता है, लेकिन बड़ा RDDs के लिए, यह OOM त्रुटि दे रहा है: मैं एक विषम विभाजन मुद्दे डिबग करने के लिए कोशिश कर रहा हूँ, मैं इस कोशिश की है। मेरा विचार यह है कि glom() ऐसा होने का कारण बन रहा है। लेकिन वैसे भी, सिर्फ यह जानना चाहता था कि ऐसा करने का कोई बेहतर तरीका है या नहीं?

उत्तर

10

उपयोग:

builder.rdd.mapPartitions(lambda it: [sum(1 for _ in it)]) 
+1

यह अच्छा होगा यदि आप ओपी के दृष्टिकोण के साथ समझा सकते हैं तो उसके मामले में काम नहीं कर रहा है और यह दृष्टिकोण ** ** क्यों काम कर रहा है ...? –

8

@LostInOverflow द्वारा जवाब महान काम करता है। मुझे नीचे दिए गए कोड का उपयोग करके आकार और साथ ही प्रत्येक विभाजन के सूचकांक को खोजने का एक और तरीका मिला है। this awesome post.

यहाँ के लिए धन्यवाद कोड है:

l = test_join.rdd.mapPartitionsWithIndex(lambda x,it: [(x,sum(1 for _ in it))]).collect() 

और उसके बाद आप इस कोड का उपयोग कर अधिकतम और न्यूनतम आकार विभाजन प्राप्त कर सकते हैं: विषम विभाजन के प्रमुख ढूँढना

min(l,key=lambda item:item[1]) 
max(l,key=lambda item:item[1]) 

, हम यदि आवश्यक हो, तो उस विभाजन की सामग्री को और डीबग कर सकते हैं।

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