pandas调用to_parquet写入S3路径时本地生成对应结构空目录问题
问题根因
- 该问题由
fastparquet引擎的分区写入路径适配缺陷导致:当你指定了partition_cols开启分区写入时,若运行环境缺少s3fs、fsspec依赖或依赖版本不匹配,fastparquet的分区目录创建逻辑会将s3://开头的远程URI误识别为本地文件系统的相对路径,直接在本地工作目录下创建s3:开头的目录层级复刻S3路径结构。 - 你观察到S3仍有文件写入,是因为非分区的核心文件写入逻辑走了S3适配接口,只有分区目录的创建逻辑 fallback 到了本地文件系统,因此出现两边都生成文件的异常现象。
解决方案
方法一:补全依赖(推荐)
安装fastparquet对接S3所需的依赖包,升级到兼容版本即可解决,无需修改原有代码逻辑:
pip install -U s3fs fsspec fastparquet pandas
方法二:更换写入引擎
将engine参数从fastparquet改为pyarrow,pyarrow对S3分区写入的原生适配性更好,也可避免该问题,修改后的代码如下:
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(10, 5)) df.columns = ['a', 'b', 'c', 'd', 'e'] df['p'] = 2 df.to_parquet('s3://my_bucket/test01/boo.parquet', engine='pyarrow', compression='gzip', partition_cols=['p'])
使用该方案需要提前安装对应依赖:pip install pyarrow s3fs
内容的提问来源于stack exchange,提问作者michaelgbj
相关产品推荐
相关产品推荐

