Ошибка, когда расширение в виде фигурных скобок включает более ~ 25 файлов в amazon-s3, прочитанных из spark

#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.