Как я могу контролировать количество строк и / или размер выходного файла в потоковой передаче Spark при записи в HDFS - куст? - PullRequest
0 голосов
/ 08 мая 2018

Использование Spark Streaming для чтения и обработки сообщений от Kafka и записи в HDFS - Hive. Так как я хочу избежать создания множества небольших файлов, которые спамят файловую систему, я хотел бы знать, есть ли способ обеспечить минимальный размер файла и / или возможность принудительно установить минимальное количество выходных строк в файле, за исключением тайм-аут. Спасибо.

1 Ответ

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

Насколько я знаю, нет способа контролировать количество строк в ваших выходных файлах. Но вы можете контролировать количество выходных файлов.

Контроль этого и рассмотрение размера набора данных могут помочь вам в ваших потребностях, поскольку вы можете рассчитать размер каждого файла в выходных данных. Вы можете сделать это с помощью команд coalesce и repartition:

df.coalesce(2).write(...)
df.repartition(2).write(...)

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

Разница в том, что с repartition вы можете увеличивать и уменьшать свои разделы, тогда как с coalesce вы можете только уменьшать.

Кроме того, имейте в виду, что repartition выполняет полное перемешивание, чтобы равномерно распределить данные между разделами, что может быть дорогостоящим и затратным по времени. С другой стороны, coalesce не выполняет полное перемешивание, вместо этого он объединяет существующие разделы.

Вы можете найти удивительное объяснение в этом другом ответе здесь

...