gpt4 book ai didi

python - Pandas DataFrame.write_parquet() 并设置 Zstd 压缩级别

转载 作者:行者123 更新时间:2023-12-03 07:51:23 45 4
gpt4 key购买 nike

我正在从 DataFrame 写出一个压缩的 Parquet 文件,如下所示:

result_df.to_parquet("my-data.parquet", compression="zstd")

我如何指导 Pandas zstd 编码的压缩级别?

最佳答案

Pandas 2.1.0pyarrow 13.0.0fastparquet 2023.8.0

如何在 DataFrame.to_parquet 中设置压缩级别

在 Pandas 2.1.0 中,我们可以使用 two different libraries as engines 来写入 parquet 文件 - pyarrowfastparquet 。它们有不同的方式来解决压缩级别,但通常是不兼容的。因此,在这两种情况下,最好显式指定 engine 参数的值,以避免任何混淆。

引擎='pyarrow'

对于pandas 2.1.0中的默认选项pyarrow,我们必须将compression_level参数传递给引擎,该参数在pyarrow documentation中进行了描述:

compression_level : int or dict, default None
Specify the compression level for a codec, either on a general basis or per-column. If None is passed, arrow selects the compression level for the compression codec in use. The compression level has a different meaning for each codec, so you have to read the documentation of the codec you are using. An exception is thrown if the compression codec does not allow specifying a compression level.

此参数将作为 to_parquet 方法的 kwargs 字典的一项传递给 pyarrow parquet writer。

引擎='fastparquet'

对于 fastparquet,压缩级别作为 compression 参数的一部分传递,在本例中应如下所示

{
column_name: {
'type': desired_compression_for_specified_column,
'args': kwargs_for_specified_compression_type
},
# ...
'_default': { # default compression type for non-specified columns
'type': 'zstd',
'args': {'level': desired_compression_level_for_zstandard}
}
}

请注意,fastparquet.write方法中没有compression_level参数,因此我们不能在以DataFrame.to_parquet为引擎的pandas fastparquet中将其用作参数。至于 Zstandard 压缩的 'args' 字典中可能的关键字,请参阅 cramjam.zstd.compress 的详细信息,即 used underneath of fastparquet 版本 2023.8.0。

示例代码

my_compression_level = 2

# with pyarrow
df.to_parquet(
'my-data.parquet',
engine='pyarrow',
compression='zstd',
compression_level=my_compression_level
)

# with fastparquet
df.to_parquet(
'my-data.parquet',
engine='fastparquet',
compression={
'_default': {
'type': 'zstd',
'args': {'level': my_compression_level}
}
}
)

关于python - Pandas DataFrame.write_parquet() 并设置 Zstd 压缩级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77047476/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com