簡體   English   中英

如何在Apache Spark Java應用程序中為每個Apache Spark執行器分配唯一的整數鍵?

[英]How can I assign a unique integer key to every Apache Spark Executor within an Apache Spark Java Application?

我需要為spark應用程序中的每個spark執行器分配一個唯一的整數ID。 我需要從在執行程序上運行的任務中檢索執行程序ID。 執行程序ID將與其他數據元素(時間戳,mac地址等)一起用於生成唯一的64位密鑰。 如何在Apache Spark Java應用程序中為每個Apache Spark執行器分配唯一的整數鍵?

分區的ID可能很有用,因為單個分區的所有元素將始終位於一個執行程序上。

mapPartitionsWithIndex可以幫助:

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和分區索引的組合在整個系統中將是唯一的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM