Spark 批处理或流中的代理键
Surrogate key in Spark batch or Streaming
我有一个用例为我使用 Spark Streaming 程序插入到 Hive table 中的每条记录生成代理键(唯一且递增 1)。即使程序重新启动,密钥也永远不会重复。
根据我的研究,这不可能在 Spark Streaming 中实现,因为执行程序将 运行 在不同的节点上。
有什么办法可以实现吗??
Spark Batch
使用RDD.zipWithIndex() 为每一行设置索引。
Spark Streaming
- 在每批结束时,找到最大键并将其存储到持久数据库中。
在每批开始时,获取最后一批的最大密钥和运行这样的代码:
val n = lastBatchMaxKey()
df.rdd.zipWithIndex().map(xx => {
val (row, idx) = (xx._1, xx._2)
val key = idx + n // 这是密钥
})
我有一个用例为我使用 Spark Streaming 程序插入到 Hive table 中的每条记录生成代理键(唯一且递增 1)。即使程序重新启动,密钥也永远不会重复。
根据我的研究,这不可能在 Spark Streaming 中实现,因为执行程序将 运行 在不同的节点上。
有什么办法可以实现吗??
Spark Batch
使用RDD.zipWithIndex() 为每一行设置索引。
Spark Streaming
- 在每批结束时,找到最大键并将其存储到持久数据库中。
在每批开始时,获取最后一批的最大密钥和运行这样的代码:
val n = lastBatchMaxKey()
df.rdd.zipWithIndex().map(xx => {
val (row, idx) = (xx._1, xx._2)
val key = idx + n // 这是密钥
})