Понимание поведения dstream.saveAsTextFiles () - PullRequest
0 голосов
/ 17 мая 2018

Я работаю с API-интерфейсом Stream Streaming, чтобы ознакомиться с ним. Я реализую проблему подсчета слов, когда я слушаю поток и нахожу накопленный счетчик слов через x секунд и выводю его в текстовые файлы. Таким образом, после всех преобразований, когда я печатаю вывод в файл с помощью функции saveAsTextFiles () DStream, я получаю странный вывод.

Я ожидаю, что он будет создавать текстовый файл через каждые x секунд и выгружать последние результаты в этот файл. Я ожидаю, что имя файла будет префикс-timestamp-суффикс, как указано в документах. Но вместо этого я получаю папку каждые x секунд с именем, которое, как я ожидаю, будет названо именем файла, а внутри этой папки будут файлы part- * с моими результатами. Хотя они и правы, но почему это происходит? Мои ожидания как-то не так?

Для трансформации и прочего я использую это (на случай, если кому-то интересно):

# sort the dstream for current batch
sorted_counts = counts.transform(lambda rdd: rdd.sortBy(lambda x: x[1], ascending=False))

# get the top K values of each rdd from the transformed dstream
topK = sorted_counts.transform(lambda rdd: rdd.zipWithIndex().filter(<filter with big index>).map(<remove index here>))

1 Ответ

0 голосов
/ 17 мая 2018

Действительно, ваши ожидания неверны.

Ваш расчет выполняется в кластере (несколько узлов исполнителей). Каждый узел работает с некоторым разделом набора данных. Когда вы записываете данные в файл / s - каждый узел сбрасывает свой набор данных в отдельный файл в том же каталоге. Вот так выглядит part- *.

...