Можно читать файлы паркета из S3, как показано здесь или здесь .
Я работаю с точками доступа S3. Имея точку доступа S3 ARN можно ли с нее читать паркетные файлы?
Я пытаюсь использовать следующий пример кода:
import s3fs
import pyarrow.parquet as pq
S3_ACCESS_POINT_ARN = "..."
s3_filesystem = s3fs.S3FileSystem()
s3_file_uri = f"{S3_ACCESS_POINT_ARN}/examples/example1.parquet"
example1_df = pq.ParquetDataset(s3_file_uri, s3_filesystem).read_pandas().to_pandas()
Выполнение этого приводит к:
ParamValidationError: Parameter validation failed:
Invalid bucket name S3_ACCESS_POINT_ARN: Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$" or be an ARN matching the regex "^arn:(aws).*:s3:[a-z\-0-9]+:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\-]{1,63}$"
Я также попытался заменить /
на :
в S3_ACCESS_POINT_ARN
, что приводит к:
PermissionError: AccessDenied
Наконец, я попытался использовать:
pq.read_table(S3_ACCESS_POINT_ARN, s3_filesystem).to_pandas()
что привело к:
OsError: Passed non-file path: S3_ACCESS_POINT_ARN
Стоит отметить, что проблем с доступом к чтению файлов с этой точки доступа нет, код ниже работает:
import boto3
S3_ACCESS_POINT_ARN = "..."
s3 = boto3.resource('s3')
bucket = s3.bucket(S3_ACCESS_POINT_ARN)
bucket.download_file(f"{S3_ACCESS_POINT_ARN}/examples/example1.parquet", "/tmp/examples/example1.parquet")
example1_df = pq.read_table("/tmp/examples/example1.parquet").to_pandas()
ОБНОВЛЕНИЕ: точка доступа S3 не разрешает операции с объектами списка не верхнего уровня:
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
Но я не вижу ни одного параметра, который позволил бы pyarrow
обрабатывать файл паркета как один файл, что потенциально могло бы избежать этой проблемы.
Invalid bucket name "arn:aws:s3:us-east-1:291160143014:accesspoint"
, поэтому фактическое имя точки доступа удалено из ARN. Я подозреваю, что pyarrow ожидает только путь ведра и еще не поддерживает точки доступа. - person taras   schedule 29.10.2020