pyarrow.lib.ArrowIOError:无效的 Parquet 文件大小为 0 字节

Lon*_*Rob 2 python boto3 pyarrow

我试图做这样的事情这样,阅读从S3存储文件的列表到pyarrow表。

如果我指定文件名,我可以这样做:

from pyarrow.parquet import ParquetDataset
import s3fs
dataset = ParquetDataset(
    "s3://path/to/file/myfile.snappy.parquet,
    filesystem=s3fs.S3FileSystem(),
)
Run Code Online (Sandbox Code Playgroud)

一切都按预期进行。但是,如果我这样做:

dataset = ParquetDataset(
    "s3://path/to/file,
    filesystem=s3fs.S3FileSystem(),
)
Run Code Online (Sandbox Code Playgroud)

我得到:

pyarrow/_parquet.pyx:1036: in pyarrow._parquet.ParquetReader.open                                                                                                                                                                                                              
pyarrow.lib.ArrowIOError: Invalid Parquet file size is 0 bytes  
Run Code Online (Sandbox Code Playgroud)

Car*_*ith 5

这发生在我身上是因为空的“成功”文件与我的镶木地板文件具有相同的 S3 前缀。我通过首先列出镶木地板文件并仅选择名称以“.parquet”结尾的文件来解决此问题:

from pyarrow.parquet import ParquetDataset
import s3fs

s3 = s3fs.S3FileSystem()

paths = [path for path in s3.ls("s3://path/to/file/") if path.endswith(".parquet")]

dataset = ParquetDataset(paths, filesystem=s3)
Run Code Online (Sandbox Code Playgroud)