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)
这发生在我身上是因为空的“成功”文件与我的镶木地板文件具有相同的 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)