我有一个用例,可以为我使用Spark Streaming程序插入Hive表中的每个记录生成代理键(唯一且递增1)。即使程序重新启动,也无法重复使用该键。
根据我的研究,这不可能在Spark流中实现,因为执行程序将在不同的节点上运行。
有什么办法可以实现?
答案 0 :(得分:1)
火花批次
使用RDD.zipWithIndex()为每行设置一个索引。
火花流
在每个批次的开始,获取最后一个批次的最大密钥,然后运行如下代码:
val n = lastBatchMaxKey()
df.rdd.zipWithIndex()。map(xx => {
val(row,idx)=(xx._1,xx._2)
val key = idx + n //这是密钥
})