2015-06-09 16 views
7

में रेंजपार्टिशनर का उपयोग कैसे करें मैं अपने जावा स्पार्क एप्लिकेशन में एक रेंजपार्टिशनर का उपयोग करना चाहता हूं, लेकिन मुझे कोई संकेत नहीं है कि दो स्केल पैरामीटर scala.math.Ordering<K> evidence$1 और scala.reflect.ClassTag<K> evidence$2 कैसे सेट करें। क्या कोई मुझे एक उदाहरण दे सकता है?स्पार्क

यहाँ JavaDoc of RangePartitioner के लिए लिंक है (यह मेरे लिए कोई मदद नहीं था, क्योंकि मैं और स्पार्क के लिए नया हूँ स्काला ...):

JavaPairRDD<Integer, String> partitionedRDD = rdd.partitionBy(new RangePartitioner<Integer, String>(10, rdd, true, evidence$1, evidence$2)); 
+0

को फोन करके एक जावा PairRDD से स्केला RDD प्राप्त कर सकते हैं आप पता लगा है कि कैसे जावा से RangePartitioner निर्माता कॉल करने के लिए? – hanslovsky

उत्तर

0

हैं:

मेरे कोड वास्तव में की तरह दिखता है आप OrderedRDDFunctions के लिए एपीआई देखते हैं, इस पर एक उदाहरण है कि आप अपनी कुंजी के लिए निहित ऑर्डरिंग कैसे सेट कर सकते हैं।

import org.apache.spark.SparkContext._ 

val rdd: RDD[(String, Int)] = ... 
implicit val caseInsensitiveOrdering = new Ordering[String] { 
    override def compare(a: String, b: String) = a.toLowerCase.compare(b.toLowerCase) 
} 

मैं अपनी चिंगारी से स्केला apis से एक टुकड़ा पता है, लेकिन आप कम से कम कैसे अपने आदेश पैरामीटर पारित करने के लिए अनुमान लगा सकते हैं। क्लासटाग प्रकार के लिए मैं जेनेरिक स्कैला दस्तावेज़ या फोरम की जांच का सुझाव दूंगा। प्रश्न में स्कैला टैग जोड़ना।

+1

क्या आप जावा से रेंजपार्टिशनर कन्स्ट्रक्टर को कॉल करने के लिए स्पष्ट रूप से विस्तारित करेंगे? धन्यवाद। – hanslovsky

0

आप अपने साथी वस्तुओं पर विधियों को कॉल करके Ordering और ClassTag दोनों बना सकते हैं।

ये इस तरह जावा में बुलाया जाता है: ClassName$.MODULE$.functionName()

आगे शिकन कि निर्माता एक स्केला RDD, नहीं एक जावा एक की आवश्यकता है। आप rdd.rdd()

final Ordering<Integer> ordering = Ordering$.MODULE$.comparatorToOrdering(Comparator.<Integer>naturalOrder()); 
    final ClassTag<Integer> classTag = ClassTag$.MODULE$.apply(Integer.class); 
    final RangePartitioner<Integer, String> partitioner = new RangePartitioner<>(
      10, 
      rdd.rdd(), //note the call to rdd.rdd() here, this gets the scala RDD backing the java one 
      true, 
      ordering, 
      classTag); 
    final JavaPairRDD<Integer, String> partitioned = rdd.partitionBy(partitioner);