Как сжать паркетный файл с помощью zstandard с помощью pandas

Я использую pandas для преобразования фреймов данных в файлы.parquet с помощью этой команды:

df.to_parquet(file_name, engine='pyarrow', compression='gzip')

Мне нужно использовать zstandard в качестве алгоритма сжатия, но приведенная выше функция принимает только gzip, snappy и brotli. Я пробовал. Есть ли способ включить zstd в эту функцию? Если нет, как я могу это сделать с другими пакетами? Я пробовал использовать zstandard, но, похоже, он принимает только байтовые объекты.

3 ответа

Обычно я использую zstandard в качестве алгоритма сжатия моих фреймов данных.

Это код, который я использую (немного упрощенный) для записи этих паркетных файлов:

import pandas as pd
import pyarrow.parquet as pq
import pyarrow as pa

parquetFilename = "test.parquet"

df = pd.DataFrame(
    {
        "num_legs": [2, 4, 8, 0],
        "num_wings": [2, 0, 0, 0],
        "num_specimen_seen": [10, 2, 1, 8],
    },
    index=["falcon", "dog", "spider", "fish"],
)

df = pa.Table.from_pandas(df)
pq.write_table(df, parquetFilename, compression="zstd")

И чтобы прочитать эти паркетные файлы:

import pandas as pd
import pyarrow.parquet as pq
import pyarrow as pa

parquetFilename = "test.parquet"
df = pq.read_table(parquetFilename)
df = df.to_pandas()

Для получения дополнительной информации посетите эти сайты для получения дополнительной информации:

Наконец-то бессовестная затычка для сообщения в блоге, которое я написал. Речь идет о балансе между скоростью и пространством для zstandard и мгновенного сжатия файлов паркета с использованием pyarrow. Он имеет отношение к вашему вопросу и включает в себя еще несколько "реальных" примеров кода для чтения и записи файлов паркета в zstandard. На самом деле я тоже скоро напишу продолжение. если вам интересно, дайте мне знать.

Вы можете просто использовать

      df.to_parquet(file_name, engine='pyarrow', compression='zstd')

Примечание: толькоpyarrowподдерживает сжатие Zstandard,fastparquetне.

Чтение еще проще, так как вам не нужно называть алгоритм сжатия:

      df = pd.read_parquet(file_name)

До сих пор (Pandas 1.5.3) это было задокументировано только в бэкэнде, начиная с Pandas 1.4.0 . В текущей исправлена ​​недостающая документация в интерфейсе .разрабатываемой версии

Вроде пока не поддерживается:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_parquet.html

сжатие {'snappy', 'gzip', 'brotli', None}, по умолчанию 'snappy' Имя используемого сжатия. Используйте None, чтобы не использовать сжатие.

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