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

Использование потоковой передачи Spark для чтения данных Json из раздела Kafka.
Я использую DataFrame для обработки данных, а позже я хочу сохранить выходные данные в файлы HDFS.Проблема заключается в том, что при использовании:

df.write.save("append").format("text")

выдает много файлов, некоторые из которых имеют большой размер, а некоторые имеют размер даже 0 байт.

Существует ли способ управления количеством выходных файлов?Кроме того, чтобы избежать «противоположной» проблемы, есть ли способ также ограничить размер каждого файла, чтобы новый файл записывался, когда текущий достигает определенного размера / числа строк?

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

вы можете использовать оценщик размера:

import org.apache.spark.util.SizeEstimator
val size  = SizeEstimator.estimate(df)

затем вы можете адаптировать количество файлов в соответствии с размером кадра данных с повторением или объединением

0 голосов
/ 05 июня 2018

Количество выходных файлов равно количеству разделов Dataset Это означает, что вы можете управлять им несколькими способами, в зависимости от контекста:

  • Для Datasets без широких зависимостей вы можете управлять вводом, используя специфические параметры считывателя
  • Для Datasets с широкими зависимостями вы можете контролировать количество разделов с параметром spark.sql.shuffle.partitions.
  • Независимо от линии, которую вы можетеcoalesce или repartition.

есть способ также ограничить размер каждого файла, чтобы новый файл записывался, когда текущий достигает определенного размера / числастроки?

Нет.Со встроенными авторами это строго отношения 1: 1.

...