Почему 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 для такого рода вещей, поэтому я просто больше запутался, почему я не могу сопоставить размеры файлов.

0 ответов

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