【问题标题】:getting OSError: Passed non-file path using pyarrow ParquetDataset获取 OSError: Passed non-file path using pyarrow ParquetDataset
【发布时间】:2021-02-10 09:50:30
【问题描述】:

我必须在不同的环境中运行一些测试。在测试中,我必须检查 s3 中的一些目录以查找 parquet 文件并将它们传输到这样的字典

import pyarrow.parquet as pq
import s3fs

env = 'dev'
aws_profile ={'dev': 'dev_aws_profile', 'qa': 'qa_aws_profile'}
def get_dictionary_from_parquet(file_name):
    fs = s3fs.S3FileSystem()
    pq_session = Session(profile_name=aws_profile[env])
    s3 = pq_session.resource('s3')
    parquet_bucket = s3.Bucket(f'valid-bucket-name-{env}')
    paths = []
    for pq_file in parquet_bucket.objects.filter(Prefix=f'valid-prefix-{env}'):
    if pq_file.key.endswith(file_name):
        paths.append(f's3://{pq_file.bucket_name}/{pq_file.key}')
    data_set = pq.ParquetDataset(paths, filesystem=fs)
    tbl = data_set.read()
    pq_dictionary = tbl.to_pydict()
    return pq_dictionary

如果 aws_profile == default 配置文件在 aws 凭据文件中,它可以完美运行,但它会返回

line 14, in get_dictionary_from_parquet
    data_set = pq.ParquetDataset(paths, filesystem=fs)
  File "/Library/Python/3.7/site-packages/pyarrow/parquet.py", line 1170, in __init__
    open_file_func=partial(_open_dataset_file, self._metadata)
  File "/Library/Python/3.7/site-packages/pyarrow/parquet.py", line 1365, in _make_manifest
    .format(path))    
OSError: Passed non-file path: s3://<valid path to parquet file>

如何将 aws profile creds 解析为 pyarrow 来修复它?

【问题讨论】:

    标签: python parquet pyarrow aws-config


    【解决方案1】:

    奇怪的是,您在 boto(3?) 对象上配置和执行文件过滤,同时使用 s3fs 实例在读取时指定文件系统。我建议两者都使用s3fs

    下面会修复它

    fs = s3fs.S3FileSystem(profile=aws_profile[env])
    

    但我建议您也可以使用相同的实例来列出您的文件

    paths = fs.glob(f"valid-bucket-name-{env}/valid-prefix-{env}/*/file_name")
    

    (或任何正确的 glob 模式 - 我无法解析您的代码)。

    【讨论】:

    • 我有一些 if else 逻辑来收集数据集的所有路径,我只是复制粘贴部分代码并简化它以使其更短且更具可读性,过滤是另一个单独的功能。但是去掉boto部分是个好主意,谢谢你的帮助
    猜你喜欢
    • 2021-11-25
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多