2014-10-09 7 views
24

मुझे स्पार्क प्रलेखन संचालन में खोजने में परेशानी है जो एक शफल और ऑपरेशन का कारण बनता है जो नहीं करता है। इस सूची में, कौन सा शफल करता है और कौन सा नहीं करता है?स्पार्क ट्रांसफॉर्मेशन क्या हैं जो शफल का कारण बनता है?

मानचित्र और फ़िल्टर नहीं। हालांकि, मैं दूसरों के साथ निश्चित नहीं हूँ।

map(func) 
filter(func) 
flatMap(func) 
mapPartitions(func) 
mapPartitionsWithIndex(func) 
sample(withReplacement, fraction, seed) 
union(otherDataset) 
intersection(otherDataset) 
distinct([numTasks])) 
groupByKey([numTasks]) 
reduceByKey(func, [numTasks]) 
aggregateByKey(zeroValue)(seqOp, combOp, [numTasks]) 
sortByKey([ascending], [numTasks]) 
join(otherDataset, [numTasks]) 
cogroup(otherDataset, [numTasks]) 
cartesian(otherDataset) 
pipe(command, [envVars]) 
coalesce(numPartitions) 

उत्तर

29

दस्तावेज़ीकरण के बिना इसे वास्तव में ढूंढना बेहद आसान है। इनमें से किसी भी फ़ंक्शन के लिए बस एक आरडीडी बनाएं और स्ट्रिंग डीबग करने के लिए कॉल करें, यहां एक उदाहरण है जिसे आप अपने आप बाकी कर सकते हैं।

scala> val a = sc.parallelize(Array(1,2,3)).distinct 
scala> a.toDebugString 
MappedRDD[5] at distinct at <console>:12 (1 partitions) 
    MapPartitionsRDD[4] at distinct at <console>:12 (1 partitions) 
    **ShuffledRDD[3] at distinct at <console>:12 (1 partitions)** 
     MapPartitionsRDD[2] at distinct at <console>:12 (1 partitions) 
     MappedRDD[1] at distinct at <console>:12 (1 partitions) 
      ParallelCollectionRDD[0] at parallelize at <console>:12 (1 partitions) 

तो आप देख सकते हैं कि distinct एक शफल बनाता है। दस्तावेज़ों के बजाए इस तरीके को खोजने के लिए भी विशेष रूप से महत्वपूर्ण है क्योंकि ऐसे परिस्थितियां हैं जहां किसी शफ़ल की आवश्यकता होगी या किसी निश्चित फ़ंक्शन के लिए आवश्यक नहीं है। उदाहरण के लिए आम तौर पर एक शफल की आवश्यकता होती है लेकिन यदि आप दो आरडीडी में शामिल होते हैं तो उसी आरडीडी स्पार्क से शाखा कभी-कभी शफल को दूर कर सकती है।

+6

यह सिर्फ प्रोग्रामिंग के बारे में आम तौर पर अच्छा बिंदु वास्तव में है। दस्तावेज़ीकरण में अक्सर जानकारी का डुप्लिकेशंस हो सकता है, और डुप्लिकेशन के साथ त्रुटियों और जानकारी की हानि होती है। कोड पढ़ने पर, कोई * बिल्कुल * क्या हो रहा है * – samthebest

+0

दस्तावेज के अनुसार, 'toDebugString' रिटर्न "इस आरडीडी का विवरण और डीबगिंग के लिए इसकी रिकर्सिव निर्भरताएं। इसलिए यदि वे मौजूद हैं तो पूर्व परिवर्तनों से संभावित शफल शामिल होंगे, भले ही सबसे हालिया परिवर्तन में शफल न हो, है ना? –

7

यहां ऑपरेशन की एक सूची है जो एक शफल का कारण बन सकता है:

cogroup

groupWith

join: हैश विभाजन

leftOuterJoin: हैश विभाजन

rightOuterJoin: हैश विभाजन

groupByKey: हैश विभाजन

reduceByKey: हैश विभाजन

combineByKey: हैश विभाजन

sortByKey: रेंज विभाजन

distinct

intersection: हैश विभाजन

repartition

coalesce

स्रोत: Big Data Analysis with Spark and Scala, विभाजन के साथ अनुकूलन, Coursera

0

यहाँ की उथल परिवर्तनों पर सामान्यीकृत बयान है।

रूपांतरण जो एक फेरबदल का कारण बन सकती पुनर्विभाजन संचालन repartition और coalesce की तरह, शामिल 'ByKey परिचालन (गिनती को छोड़कर) groupByKey और reduceByKey, और तरह संचालन cogroup और join की तरह शामिल हो। कोड को पढ़ने और पढ़ने प्रलेखन से अधिक कोड का उपयोग करके सवालों के जवाब देने की कोशिश -

source

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