Как я могу посчитать среднее значение для каждого ключа или группы записей из Spark Streaming DStream? - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть проблема с Spark Scala, которую я хочу посчитать среднее из данных dstream, я получаю данные из kafka в dstream следующим образом,

[(2,110), (2,130), (2 120), (3 200), (3 206), (3 206), (4 150), (4 160), (4 170)]

Я хочу считать их вот так:

[(2, (110 + 130 + 120) / 3), (3, (200 + 206 + 206) / 3), (4, (150 + 160 + 170) / 3)]

затем получите такой результат,

[(2,120), (3,204), (4,160)]

Как я могу сделать это сСкала из Дстрима?Я использую спарк версии 1.6

1 Ответ

0 голосов
/ 08 сентября 2018

Используйте карту для преобразования ввода (x, y) -

[(2110), (2130), (2120), (3200), (3206), (3206), (4150), (4160), (4170)]

до (х, (у, 1)

[(2, (110, 1)), (2, (130, 1)), (2, (120, 1)), (3, (200, 1)), (3, (206, 1)), (3, (206, 1)), (4, (150, 1)), (4, (160, 1), (4, (170, 1))]

Теперь, используйте redudceByKeyAndWindow, написав функцию сокращения, которая добавит две записи в виде - (x, (y1, 1)) и (x, (y2, 1)) до (x, (y1 + y2, 1 + 1)

[(2, (360, 3)), (3, (612, 3)), (4, (480, 3))]

Запустите карту еще раз, чтобы получить среднее значение сейчас - (x, (y1, y2)) - (x, (y1 / y2))

* * Тысяча двадцать-одина [(2120), (3204), (4160)] * * тысяча двадцать-дв
...