У меня есть сотни тысяч небольших паркетных файлов, которые я пытаюсь регулярно читать в Spark. Мое приложение работает, но перед тем, как файлы будут прочитаны с использованием узлов-исполнителей, узел драйвера, похоже, получает статус каждого отдельного файла. Я прочитал в нем немного, и это необходимо, чтобы вывести схему и разделы. Я попытался представить их так:
sparkSession.baseRelationToDataFrame(
DataSource
.apply(
sparkSession,
paths = paths, // List of thousands of parquet files in S3
partitionColumns = Seq("my_join_column"),
userSpecifiedSchema = Some(schema),
className = "parquet",
options = Seq().toMap
)
.resolveRelation(checkFilesExist = false)
)
Но даже при предоставлении столбцов схемы и раздела требуется некоторое время. Немного посмотрев код resolveRelation
, похоже, что он все еще должен запросить статус каждого файла, чтобы построить InMemoryFileIndex
.
Есть ли способ обойти эту проблему?
Я использую spark-sql 2.3.1
.