如何在Spark中使用RangePartitioner

D. *_*ler 8 scala partitioning scala-java-interop apache-spark

我想在我的Java Spark应用程序中使用RangePartitioner,但我不知道如何设置两个scala参数scala.math.Ordering<K> evidence$1scala.reflect.ClassTag<K> evidence$2.有人能举个例子吗?

这是RangePartitionerJavaDoc链接(对我来说没什么用,因为我是Spark和Scala的新手......):

我的代码实际上看起来像:

JavaPairRDD<Integer, String> partitionedRDD = rdd.partitionBy(new RangePartitioner<Integer, String>(10, rdd, true, evidence$1, evidence$2));
Run Code Online (Sandbox Code Playgroud)

nir*_*nir 1

如果您查看 api,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)
}
Run Code Online (Sandbox Code Playgroud)

我知道它是来自 Spark-scala api 的片段,但您至少可以推断如何传递您的 Ordering 参数。对于 ClassTag 类型,我建议检查通用 scala 文档或论坛。将 scala 标签添加到问题中。