#apache-spark #amazon-s3 #pyspark #brace-expansion
#apache-spark #amazon-s3 #pyspark #расширение в виде фигурных скобок
Вопрос:
Я только что обновился до использования spark 3 вместо spark 2.4.
Следующий код в spark 2.4 работал нормально
df = spark.read.parquet('s3a://bucket/path/{'
'file1,'
'file2,'
'file3,'
'file4,'
'file5,'
'file6,'
'file7,'
'file8,'
'file9,'
'file10,'
'file11,'
'file12,'
'file13,'
'file14,'
'file15,'
'file16,'
'file17,'
'file18,'
'file19,'
'file20,'
'file21,'
'file22,'
'file23,'
'file24,'
'file25'
'}')
но в spark 3 я получаю эту ошибку:
Py4JJavaError: An error occurred while calling o944.parquet.
: org.apache.hadoop.fs.s3a.AWSS3IOException: getFileStatus on s3a://
...
com.amazonaws.services.s3.model.AmazonS3Exception: Bad Request (Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: aaa), S3 Extended Request ID:
Если я уменьшу количество файлов до менее чем примерно 24, запрос успешно завершится в spark 3.
Я не могу найти никаких ссылок на ограничения на количество файлов в расширении фигурной скобки, подобном этому, в s3. Что может быть не так? Как это можно исправить?
Комментарии:
1. не знаю почему, но вы можете предоставить список строк имен файлов на Python вместо использования расширения в виде фигурных скобок.
Ответ №1:
почему бы просто не предоставить spark весь каталог для обработки и позволить ему сканировать файлы?
df = spark.read.parquet('s3a://bucket/path/')
Ответ №2:
В запросе aws не более 1024 символов. Каким-то образом это не было проблемой в spark 2.