Spark 批处理或流中的代理键

Surrogate key in Spark batch or Streaming

我有一个用例为我使用 Spark Streaming 程序插入到 Hive table 中的每条记录生成代理键(唯一且递增 1)。即使程序重新启动,密钥也永远不会重复。

根据我的研究,这不可能在 Spark Streaming 中实现,因为执行程序将 运行 在不同的节点上。

有什么办法可以实现吗??

Spark Batch

使用RDD.zipWithIndex() 为每一行设置索引。

Spark Streaming

  1. 在每批结束时,找到最大键并将其存储到持久数据库中。
  2. 在每批开始时,获取最后一批的最大密钥和运行这样的代码:

    val n = lastBatchMaxKey()
    df.rdd.zipWithIndex().map(xx => {
    val (row, idx) = (xx._1, xx._2)
    val key = idx + n // 这是密钥
    })