Spark批处理或流式处理中的代理密钥

时间:2019-01-16 17:49:37

标签: apache-spark spark-streaming

我有一个用例,可以为我使用Spark Streaming程序插入Hive表中的每个记录生成代理键(唯一且递增1)。即使程序重新启动,也无法重复使用该键。

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

有什么办法可以实现?

1 个答案:

答案 0 :(得分:1)

  

火花批次

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

  

火花流

  1. 在每个批次的末尾,找到最大密钥并将其存储到持久数据库中。
  2. 在每个批次的开始,获取最后一个批次的最大密钥,然后运行如下代码:

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