2015-06-07 4 views
2

Я новичок в Spark, и я хотел бы понять, нужно ли мне агрегировать данные DStream по ключу до вызова updateStateByKey?Does UpdateStateByKey в Spark перетасовывает данные через

Мое приложение в основном подсчитывает количество слов в каждом втором используя Спарк Потоковых, где я выполнить несколько карт операций перед выполнением государства полного обновления следующим образом,

val words = inputDstream.flatMap(x => x.split(" ")) 
val wordDstream = words.map(x => (x, 1)) 
val stateDstream = wordDstream.updateStateByKey(UpdateFunc _) 
stateDstream.print() 

Say после второй операции на карте, то же самый ключи (слова) могут присутствовать на рабочих узлах из-за разных разделов. Поэтому я предполагаю, что метод updateStateByKey внутренне перемещает и агрегирует значения ключей как Seq [Int] и вызывает updateFunc. Правильно ли мое предположение?

ответ

1

Правильно: как вы можете видеть в сигнатуре метода, он принимает необязательный аргумент partitionNum/Partitioner, который обозначает количество редукторов, то есть государственных обновлений. Это приводит к тасованию.

Кроме того, я предлагаю, чтобы явно поставить число там в противном случае искры может значительно уменьшить параллелизм вашего задания, пытаясь выполнить задачи на местном уровне относительно расположения блоков блокпоста HDFS файлов

+0

Спасибо alexandrosB !! – Sathish

Смежные вопросы