getting OSError: Passed non-file path using pyarrow ParquetDataset
getting OSError: Passed non-file path using pyarrow ParquetDataset
我必须 运行 在不同的环境中进行一些测试。在测试中,我必须检查 s3 中的一些目录以找到镶木地板文件并将它们传输到这样的字典
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 凭据文件中的配置文件,它会完美运行,但 returns
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 以修复它?
奇怪的是,您在 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 模式 - 我在解析您的代码时遇到了问题)。
我必须 运行 在不同的环境中进行一些测试。在测试中,我必须检查 s3 中的一些目录以找到镶木地板文件并将它们传输到这样的字典
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 凭据文件中的配置文件,它会完美运行,但 returns
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 以修复它?
奇怪的是,您在 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 模式 - 我在解析您的代码时遇到了问题)。