Как настроить размер паркетных блоков в Spark в Azure HDInsight?

У меня есть около 3500 CSV, которые я конвертирую в паркет, разделенный по дате (эти данные охватывают 7 дней). Я хочу установить размер файла паркета таким образом, чтобы каждый файл занимал 1 ГБ. в настоящее время я получаю слишком много файлов (400-600 в день) с различными размерами от 64 до 128 МБ. Я могу переразбить (используя перераспределение / объединение) x количество файлов на раздел (день), но у меня все еще есть разные размеры файлов в зависимости от того, сколько данных существует в день, поэтому день 1 может иметь 20 ГБ, так что 10 файлов по 2 ГБ каждый, но День 2 имеет 10 ГБ, поэтому каждый файл 1 ГБ. Я смотрю, как установить / код, чтобы каждый файл в каждом разделе был 1 ГБ. Я использую pyspark, и вот код, который я использую для написания паркетных файлов.

csv_reader_df.write.partitionBy("DateId").option("compression","snappy").parquet('hdfs://mycluster/home/sshuser/snappy_data.parquet')

1 ответ

Программа записи паркетных файлов будет работать с одним файлом на раздел Spark. Вы должны перераспределить или объединить, чтобы управлять количеством файлов.

val PARQUET_BLOCK_SIZE: Int = 32 * 1024 * 1024
val targetNbFiles: Int = 20
csv_reader_df.coalesce(targetNbFiles).write.option("parquet.block.size",PARQUET_BLOCK_SIZE).partitionBy("DateId").option("compression","snappy").parquet('hdfs://mycluster/home/sshuser/snappy_data.parquet')

Ссылка на искровую документацию:

Настройку Parquet можно выполнить с помощью метода setConf в SparkSession или путем выполнения команд SET key=value с помощью SQL.

Итак, вы можете установить parquet.block.size этим!

Другие вопросы по тегам