【问题标题】:How can I read a csv.gz file with pyarrow from a file object?如何从文件对象中读取带有 pyarrow 的 csv.gz 文件?
【发布时间】:2021-02-11 17:13:15
【问题描述】:

我正在尝试使用 pyarrow 从 S3 读取一堆 gzip 压缩的 csv 文件。 pyarrow.csv.read_csv 的文档页面说

如果是字符串或路径,并且以可识别的压缩文件扩展名结尾(例如“.gz”或“.bz2”

很遗憾,我无法提供字符串值作为输入路径,因此 CSV 阅读器假定没有压缩。

import s3fs
import pyarrow.csv as pv

s3 = s3fs.core.S3FileSystem(anon=False)

csv_path = 's3://bucket_name/path/to/file.csv.gz'

with s3.open(csv_path) as s3fp:
    table = pv.read_csv(s3fp)

我试图更深入地研究 pyarrow 内部结构,但我无法确定一种方法来传递压缩类型的附加参数。

【问题讨论】:

  • 目前,只有在将实际路径传递给本地文件时才能读取压缩文件。所以你的解决方法很好,但我打开了一个问题来跟踪可能的增强功能:issues.apache.org/jira/browse/ARROW-10425

标签: python pandas csv pyarrow


【解决方案1】:

找到了解决方法。在从文件处理程序读取 csv 之前,可以在两者之间添加 gzip 解压缩:

import gzip
import s3fs
import pyarrow.csv as pv

s3 = s3fs.core.S3FileSystem(anon=False)

csv_path = 's3://bucket_name/path/to/file.csv.gz'

with s3.open(csv_path) as s3fp:
    with gzip.open(s3fp) as fp:
        table = pv.read_csv(fp)

【讨论】:

    猜你喜欢
    • 2020-08-23
    • 2021-09-23
    • 2018-07-20
    • 1970-01-01
    • 2019-11-25
    • 2011-09-26
    • 1970-01-01
    相关资源
    最近更新 更多