我需要为 spark 应用程序中的每个 spark executor 分配一个唯一的整数 id。我需要从执行器上运行的任务中检索执行器 ID。executor id 将与其他数据元素(时间戳、mac 地址等)一起用于生成唯一的 64 位密钥。如何为 Apache Spark Java 应用程序中的每个 Apache Spark 执行程序分配一个唯一的整数键?
问问题
433 次
1 回答
1
分区的 id 可能很有用,因为单个分区的所有元素将始终位于一个执行程序上。
val spark = SparkSession.builder.master("local[*]").appName("partitionIndex").getOrCreate()
import spark.implicits._
val ds = spark.createDataset(Seq.range(1, 21)).repartition(4)
ds.rdd
.mapPartitionsWithIndex((partitionIndex, it) => {
println("processing partition " + partitionIndex)
it.toList.map(i => new String("partition " + partitionIndex + " contains number " + i)).iterator
})
.foreach(println)
印刷:
processing partition 1
processing partition 0
processing partition 2
processing partition 3
partition 1 contains number 3
partition 2 contains number 4
partition 2 contains number 9
partition 2 contains number 14
partition 2 contains number 19
partition 0 contains number 2
...
partition 3 contains number 1
partition 3 contains number 5
...
如果您能够为一个分区内的所有行分配一个唯一 id,那么这个唯一 id 和分区索引的组合在整个系统中将是唯一的。
于 2018-02-20T20:56:21.167 回答