Почему Pyarrow и Pandas Dataframe Compression создают файлы большего объема памяти, чем AWS Databrew?
Я перехожу от фрейма данных к файлу паркета, используя функцию pyarrow или pandas dataframe 'to_parquet', и в обоих из них есть поле, чтобы указать, какое сжатие вы хотите выполнить. Проблема заключается в том, что когда я создаю файлы паркета с помощью этих библиотек, размер файла в два раза превышает размер файла вывода задания в AWS Databrew со всеми теми же прикрепленными настройками и ссылкой на одни и те же входные данные.
Для пирроу:
df = df.convert_dtypes()
stream = pa.BufferOutputStream()
table = pa.Table.from_pandas(df)
pq.write_table(table, stream, compression='SNAPPY')
Для кадра данных панд:
df = df.convert_dtypes()
stream = io.BytesIO()
df.to_parquet(stream, compression='snappy',engine='pyarrow', index=False)
Я проверил, что в кадре данных есть точные данные, которые проходят через AWS, и все типы данных совпадают, но я не приближаюсь к тому же размеру файла.
Я также пробовал:
pa.compress(df, codec='snappy', memory_pool=None)
со сжатием в функциях 'to_parquet', установленным на None, но это, кажется, дает мне мусорные данные, которые AWS не может прочитать, и почему-то они меньше, чем размер файла, который я ожидаю.
Я что-то пропустил? Действительно ли функции to_parquet сжимают данные? Какое колдовство проделывает AWS Databrew, чтобы заставить файл получить свой волшебный размер файла? Кажется, я не могу найти хорошие ответы в Google или в документации и чувствую, что хожу по кругу, поэтому любая помощь очень ценится. Из того, что я видел, похоже, что библиотеки AWS используют pyarrow для такого рода вещей, поэтому я просто больше запутался, почему я не могу сопоставить размеры файлов.