Как отслеживать обновленные поля СДР в Spark? - PullRequest
0 голосов
/ 01 апреля 2020

Существует проблема, с которой я сталкиваюсь при отслеживании обновленных полей в spark RDD. Предположим, что у нас есть СДР, подобный этому:

(1,2)
(2,10)
(5,9)
(3,8)
(8,15)

на основании некоторых условий значение некоторого keys может измениться. например, значение key=2 изменяется с 10 на 11. тогда значение ключа в СДР, значение которого равно ключу обновленной строки, должно быть соответственно изменено. например, key=1 имеет значение, равное 2, которое 2 является ключом в другой строке. поскольку значение ключа = 2 изменяется на 11. тогда значение ключа = 1 должно измениться на 11 на. после некоторого выполнения СДР выглядит так:

(1,11)
(2,11)
(5,9)
(3,7)
(8,7)

Есть ли эффективный способ реализовать это?

1 Ответ

1 голос
/ 01 апреля 2020

Предположим, вы говорите о DStream (RDD). В этом случае вы можете использовать метод updateStateByKey.

Чтобы использовать updateStateByKey, вам необходимо предоставить функцию update(events, oldState), которая принимает поступившие события для ключа и его предыдущего состояния и возвращает newState для хранения.

  • events : список событий, поступивших в текущий пакет (может быть пустым).
  • oldState : необязательный объектный объект состояния, хранящийся в Option; он может отсутствовать, если для ключа не было преобладающего состояния.
  • newState : возвращается функцией, также является Option.

. результат updateStateByKey() будет новым DStream, который содержит СДР из пар (ключ, состояние).

Basi c Пример:

def myUpdate(values: Seq[Long], state: Option[Long]) = {
  // select new value
}

myDStream.updateStateByKey(myUpdate _)

Фон, полученный из книги "Учебная искра" (О'Рейли).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...