2014-10-15 4 views
12

स्पार्क में आरडीडी की टेकऑर्डर्ड() विधि के ऑर्डर को रिवर्स करने के लिए वाक्यविन्यास क्या है?RDD.takeOrdered() के लिए ऑर्डर करने के लिए कैसे करें?

बोनस अंक के लिए, स्पार्क में आरडीडी के लिए कस्टम ऑर्डरिंग के लिए वाक्यविन्यास क्या है?

उत्तर

23

उलटे क्रम

val seq = Seq(3,9,2,3,5,4) 
val rdd = sc.parallelize(seq,2) 
rdd.takeOrdered(2)(Ordering[Int].reverse) 

परिणाम सरणी (9,5)

कस्टम आदेश

हम उम्र से लोगों को सॉर्ट होगा।

case class Person(name:String, age:Int) 
val people = Array(Person("bob", 30), Person("ann", 32), Person("carl", 19)) 
val rdd = sc.parallelize(people,2) 
rdd.takeOrdered(1)(Ordering[Int].reverse.on(x=>x.age)) 

परिणाम सरणी (व्यक्ति (एन, 32)) हो जाएगा

+1

आरोही क्रमबद्ध हम क्या करने >>> rdd.takeOrdered (2) या जरूरत ऐसा करने के लिए >>> rdd.takeOrdered (2) (ऑर्डरिंग [Int])। डिफ़ॉल्ट रूप से इसे आरोही क्रम में क्रमबद्ध किया जाता है। लेकिन इसके बजाय शीर्ष (2) कमांड का उपयोग करके इसे करने का एक और अधिक अनुकूलित तरीका है। –

+0

चढ़ाई में कस्टम ऑर्डर करने के लिए >>> rdd.takeOrdered (1) (ऑर्डरिंग [Int] .on (x => x.age))। Foreach (println) ... ऑब्जेक्ट के स्ट्रिंग फ़ील्ड पर कस्टम ऑर्डर करने के लिए >> > rdd.takeOrdered (1) (आदेश [स्ट्रिंग] .on (x => x.name))। foreach (println) –

7
val rdd1 = sc.parallelize(List(("Hadoop PIG Hive"), ("Hive PIG PIG Hadoop"), ("Hadoop Hadoop Hadoop"))) 

val rdd2 = rdd1.flatMap(x => x.split(" ")).map(x => (x,1)) 

val rdd3 = rdd2.reduceByKey((x,y) => (x+y)) 

// रिवर्स आदेश (अवरोही क्रम)

rdd3.takeOrdered(3)(Ordering[Int].reverse.on(x=>x._2)) 

आउटपुट:

res0: Array[(String, Int)] = Array((Hadoop,5), (PIG,3), (Hive,2)) 

// आरोही क्रम

rdd3.takeOrdered(3)(Ordering[Int].on(x=>x._2)) 

आउटपुट:

res1: Array[(String, Int)] = Array((Hive,2), (PIG,3), (Hadoop,5)) 
संबंधित मुद्दे