如何从文件对象中读取带有 pyarrow 的 csv.gz 文件?

How can I read a csv.gz file with pyarrow from a file object?

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

If a string or path, and if it ends with a recognized compressed file extension (e.g. “.gz” or “.bz2”

不幸的是,我无法提供字符串值作为输入路径,因此 CSV reader 假设没有压缩。

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 的内部结构,但我无法找到一种方法来传递压缩类型的附加参数。

找到解决方法。在从文件处理程序读取 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)