2015-06-09 36 views
7

Java Spark Uygulamamda RangePartitioner kullanmak istiyorum, ancak iki scala parametresi scala.math.Ordering<K> evidence$1 ve scala.reflect.ClassTag<K> evidence$2'un nasıl ayarlanacağı konusunda hiçbir fikrim yok. Birisi bana bir örnek verebilir mi? İşte Spark içinde RangePartitioner nasıl kullanılır?

JavaDoc of RangePartitioner link (Ben Spark yeniyim ve çünkü benim için hiçbir yardımcı oldu Scala ...):

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

rdd.rdd() arayarak java PairRDD gelen scala RDD alabilirim? – hanslovsky

cevap

0

ise:

Benim Kod gerçek görüntüsü OrderedRDDFunctions için api'ye bakın, anahtarınız için dolaylı siparişi nasıl belirleyebileceğinize dair bir örnek var.

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) 
} 

ben onun kıvılcım-scala apis bir pasajı biliyorum ama en azından Sipariş parametresi geçirmek için nasıl çıkarabiliriz. ClassTag türü için genel scala dokümanı veya forumu kontrol etmenizi öneririm. Scala etiketini soruya eklemek.

+1

Java'dan RangePartitioner yapıcısını nasıl çağırmanız gerektiğini açıklığa kavuşturur musunuz? Teşekkürler. – hanslovsky

0

Yardımcı nesnelerdeki yöntemleri çağırarak hem Ordering hem de ClassTag'u oluşturabilirsiniz.

Bu

böyle Java adlandırılır: ClassName$.MODULE$.functionName()

ilave bir kırışıklık yapıcı bir skalası RDD, bir Java bir gerektirmesidir. Sen Java dan RangePartitioner kurucusunu çağırmak için anladım mı

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);