Используя AWS Firehose, я конвертирую входящие записи в паркет. В одном примере у меня есть 150k идентичных записей, введенных в пожарный шланг, и один паркет 30kb записывается в s3. Из-за того, как данные разделяются пожарными шлангами, у нас есть вторичный процесс (лямбда, запускаемая событием s3 put), считывающая паркет и перераспределяющая его на основе даты в самом событии. После этого процесса перераспределения размер файла 30 КБ увеличивается до 900 КБ.
Проверка обоих паркетных файлов-
- Мета не меняется
- Данные не меняются
- Они оба используют сжатие SNAPPY
- Паркет пожарного рукава создается parquet-mr, паркет, созданный пиарроу, создается parquet-cpp
- Паркет, созданный пиарроу, имеет дополнительные заголовки для панд
Полный процесс перераспределения -
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 КБ?