Используя AWS Firehose, конвертирую входящие записи в паркет. В одном примере у меня есть 150 тысяч идентичных записей, поступающих в пожарный шланг, и один паркет размером 30 килобайт записывается в s3. Из-за того, как firehose разделяет данные, у нас есть вторичный процесс (лямбда, запускаемый событием s3 put), читаемый в паркете и перераспределяющий его на основе даты в самом событии. После этого процесса перераспределения размер файла с 30 КБ увеличивается до 900 КБ.
Осмотр обеих паркетных пилок.
- Мета не меняется
- Данные не меняются
- Оба они используют сжатие SNAPPY.
- Паркет пожарного шланга создается parquet-mr, паркет Pyarrow создается parquet-cpp.
- Паркет, сгенерированный pyarrow, имеет дополнительные заголовки панд
Полный процесс передела-
import pyarrow.parquet as pq
tmp_file = f'{TMP_DIR}/{rand_string()}'
s3_client.download_file(firehose_bucket, key, tmp_file)
pq_table = pq.read_table(tmp_file)
pq.write_to_dataset(
pq_table,
local_partitioned_dir,
partition_cols=['year', 'month', 'day', 'hour'],
use_deprecated_int96_timestamps=True
)
Я предполагаю, что будут некоторые изменения в размерах, но я был удивлен, обнаружив такую большую разницу. Учитывая описанный мною процесс, что может привести к увеличению размера исходного паркета с 30 до 900 КБ?