S3 Select не связан с вашим вариантом использования.
Выбор S3: выберите SQL и выполните проектирование в хранилище S3, чтобы клиент получил предварительно отфильтрованные данные. Результат возвращается как CSV с удаленным заголовком или JSON. Вы не можете тогда иметь> 1 работника, нацеленного на это. (вы можете попробовать, но каждому работнику придется считывать и отбрасывать все данные в цикле до его смещения, и предсказать диапазоны, которые каждый работник может обработать, практически невозможно)
У вас:> 1 рабочий обрабатывает различные части файла, который был разбит на разделы
Разделение больших файлов на более мелкие части для параллельной обработки - это именно то, что делает Spark (и mapreduce, hive и т. Д.) Для любого формата, где это имеет смысл.
CSV-файлы легко разбиваются на разделы при условии, что они сжаты с помощью разделяемого формата формата сжатия (нет, snappy, но не gzip)
Все, что нужно, это указать искре, что такое порог разделения. Для S3a установите значение fs.s3a.block.size на значение, на которое оно затем может быть разделено, тогда ваши запросы к CSV, Avro, ORC, Parquet и т. П. Будут разделены среди рабочих.
Если ваши работники не выполняют много вычислений в строке, существует минимальный размер блока, прежде чем это даже стоит делать. Эксперимент.