Суррогатный ключ в пакете Spark или Streaming - PullRequest
0 голосов
/ 16 января 2019

У меня есть сценарий использования для генерации суррогатного ключа (уникального и с приращением 1) для каждой записи, которую я вставляю в таблицу Hive с помощью программы Spark Streaming. Клавиша не может быть повторена, даже если программа перезапустится.

Основываясь на моих исследованиях, это невозможно реализовать в потоковой передаче искры, поскольку исполнители будут работать на разных узлах.

Есть ли способ реализовать это ??

1 Ответ

0 голосов
/ 17 января 2019

Spark Batch

Используйте RDD.zipWithIndex (), чтобы установить индекс для каждой строки.

Spark Streaming

  1. В конце каждого пакета найдите ключ max и сохраните его в постоянной базе данных.
  2. В начале каждой партии получите ключ макс. Последней партии и запустите следующие коды:

    val n = lastBatchMaxKey ()
    df.rdd.zipWithIndex (). map (xx => {
    val (строка, idx) = (xx._1, xx._2)
    val key = idx + n // это ключ
    })

...