2015-10-01 11 views
6

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

उत्तर

3

स्पार्क में छंटाई एक अवस्थायाँ प्रक्रिया है जो की आवश्यकता है की उथल:

  1. इनपुट RDD नमूना और इस नमूने प्रत्येक उत्पादन विभाजन (samplecollect के बाद)
  2. इनपुट RDD विभाजित है के लिए सीमाओं की गणना करने के लिए किया जाता है पहले चरण में गणना की सीमाओं के साथ rangePartitioner का उपयोग कर (partitionBy)
  3. दूसरे चरण से प्रत्येक विभाजन स्थानीय रूप से क्रमबद्ध किया जाता है (mapPartitions)

जब डेटा एकत्र किया जाता है तो विभाजनकर्ता द्वारा परिभाषित आदेश का पालन करना है।

से ऊपर चरणों स्पष्ट रूप से एक डिबग स्ट्रिंग में परिलक्षित होते हैं:

scala> val rdd = sc.parallelize(Seq(4, 2, 5, 3, 1)) 
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at ... 

scala> rdd.sortBy(identity).toDebugString 
res1: String = 
(6) MapPartitionsRDD[10] at sortBy at <console>:24 [] // Sort partitions 
| ShuffledRDD[9] at sortBy at <console>:24 [] // Shuffle 
+-(8) MapPartitionsRDD[6] at sortBy at <console>:24 [] // Pre-shuffle steps 
    | ParallelCollectionRDD[0] at parallelize at <console>:21 [] // Parallelize 
संबंधित मुद्दे