2014-11-17 17 views
9

में मूल्य से मैं एक चिंगारी जोड़ी RDD (कुंजी, गिनती) नीचेआदेश चिंगारी जोड़ी RDD

Array[(String, Int)] = Array((a,1), (b,2), (c,1), (d,3)) 

का उपयोग चिंगारी स्केला एपीआई कैसे एक नई जोड़ी RDD जो मूल्य के अनुसार क्रमबद्ध है प्राप्त करने के लिए के रूप में है?

आवश्यक परिणाम: Array((d,3), (b,2), (a,1), (c,1))

+0

मूल्यों में पुनरावृत्ति हो सकता है के बाद sortByKey को लागू करके किसी अन्य तरीके से किया गया है? यदि नहीं: कुंजी और मानों को स्वैप करें और कुंजी द्वारा सॉर्ट करें, वापस स्वैप करें। –

+0

हां, मान दोहराए जाते हैं। –

उत्तर

27

यह काम करना चाहिए:

//Assuming the pair's second type has an Ordering, which is the case for Int 
rdd.sortBy(_._2) // same as rdd.sortBy(pair => pair._2) 

कुंजी और मान द्वारा

+0

हाय @ गैबरबाकोस, मैंने इस तरह का नक्शा बनाया - 'val b = a.map (x => (x (0), x)) 'यहां' b' प्रकार' org.apache.spark.rdd है। आरडीडी [(कोई भी, org.apache.spark.sql.Row)] 'जब मैं 'b.sortBy (_._ 2)' कोशिश करता हूं, यह काम नहीं करता है। क्या _ –

+0

हाय @ सुमित कुमार गोज का उपयोग करने के बारे में कोई चर्चा है, यह एक अलग सवाल की तरह लगता है। मुझे लगता है कि आपको अपने ['org.apache.spark.sql.Row'] के लिए 'ऑर्डरिंग' परिभाषित करने की आवश्यकता है (https://spark.apache.org/docs/1.3.1/api/scala/index.html# org.apache.spark.sql.Row) टाइप करें, क्योंकि यह 'ऑर्डर' नहीं है। यदि आप एक नया प्रश्न बनाते हैं तो कृपया त्रुटि संदेश भी जोड़ें। '_' निम्नलिखित के लिए सिर्फ एक वाक्य रचनात्मक चीनी है: 'aVariable => aVariable', इसलिए' _._ 2' भी इस तरह लिखा जा सकता था:' pair => pair._2'। –

+0

[लिंक] (http://stackoverflow.com/questions/30469864/order-by-value-in-spark-pairrdd-from-key-value-where-the-value-is-from-spark-s) –

5

क्रमबद्ध (आप भी जब वहाँ संबंधों हैं खाते में कुंजी लेने के लिए चाहते हो सकता है हालांकि।) आरोही और अवरोही क्रम में

val textfile = sc.textFile("file:///home/hdfs/input.txt") 
val words = textfile.flatMap(line => line.split(" ")) 
//Sort by value in descending order. For ascending order remove 'false' argument from sortBy 
words.map(word => (word,1)).reduceByKey((a,b) => a+b).sortBy(_._2,false) 
//for ascending order by value 
words.map(word => (word,1)).reduceByKey((a,b) => a+b).sortBy(_._2) 

//Sort by key in ascending order 
words.map(word => (word,1)).reduceByKey((a,b) => a+b).sortByKey 
//Sort by key in descending order 
words.map(word => (word,1)).reduceByKey((a,b) => a+b).sortByKey(false) 

यह बी और कुंजी और मूल्य

//Sort By value by swapping key and value and then using sortByKey 
val sortbyvalue = words.map(word => (word,1)).reduceByKey((a,b) => a+b) 
val descendingSortByvalue = sortbyvalue.sortByKey(false).map(x => (x._2,x._1)) 
descendingSortByvalue.toDF.show 
descendingSortByvalue.foreach {n => { 
val word= n._1 
val count = n._2 
println(s"$word:$count")}} 
+0

बहुत अच्छे विस्तृत उदाहरण –

+0

धन्यवाद विजय इननामुरी –

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