You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用PyArrow无需转换为Pandas在S3文件夹间读写Parquet文件?

无需转换Pandas,用PyArrow直接在S3间迁移Parquet文件

当然可以!完全不需要转换成Pandas就能完成这个操作——PyArrow本身就支持直接在S3上读写Parquet数据集,你的代码里多了不必要的Pandas转换步骤,咱们来简化一下:

修正后的代码

import pyarrow.parquet as pq
import pyarrow as pa
import s3fs

# 初始化S3文件系统连接
s3 = s3fs.S3FileSystem()
bucket = 'demo-s3'

# 直接读取源文件夹的Parquet数据集为PyArrow Table(跳过Pandas转换)
source_dataset = pq.ParquetDataset(f's3://{bucket}/old', filesystem=s3)
parquet_table = source_dataset.read(nthreads=4)

# 将Table写入目标S3文件夹
pq.write_to_dataset(
    parquet_table,
    f's3://{bucket}/new',
    filesystem=s3,
    use_dictionary=True,
    compression='snappy'
)

关键说明

  • 你原来的代码中,pq.ParquetDataset(...).read(nthreads=4)已经直接返回了pa.Table对象,完全没必要转成Pandas DataFrame再转回Table,这一步只会额外消耗内存和时间。
  • 如果你的源Parquet数据集是分区存储的(比如按date或category字段分区),ParquetDataset会自动识别分区结构,写入时可以通过partition_cols参数指定是否保留原分区逻辑,或者重新设置分区。
  • 若处理超大规模数据集担心内存不足,可以使用pq.ParquetScanner实现分批读取和写入,示例如下:
scanner = pq.ParquetScanner.from_dataset(source_dataset, nthreads=4)
with scanner.scan_batches() as batches:
    pq.write_to_dataset(
        batches,
        f's3://{bucket}/new',
        filesystem=s3,
        use_dictionary=True,
        compression='snappy'
    )

注意事项

确保你的运行环境有足够的S3访问权限,s3fs能正常读写目标bucket的文件夹;另外,nthreads参数可以根据你的服务器资源调整,提升并行读写效率。

内容的提问来源于stack exchange,提问作者thotam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:22:29