tl; dr load()
- это API DataFrameReader (org.apache.spark.sql.DataFrameReader#load
), как видно из приведенного ниже кода, который возвращает DataFrame
, поверх которого могут применяться преобразования Spark.
/**
* Loads input in as a `DataFrame`, for data sources that support multiple paths.
* Only works if the source is a HadoopFsRelationProvider.
*
* @since 1.6.0
*/
@scala.annotation.varargs
def load(paths: String*): DataFrame
Чтобы выполнить преобразование, необходимо создать DataFrame.
Чтобы создать кадр данных из пути (HDFS, S3 и т. Д.), Пользователи могут использовать spark.read.format("<format>").load()
. (Существует также API для конкретных источников данных, который автоматически загружает файлы, например spark.read.parquet(<path>)
)
Почему это занимает целую 1 секунду?
В файловых источниках это время можно отнести к списку файлов.В HDFS это перечисление не дорого, поскольку, как и в случае облачного хранилища, такого как S3, это перечисление очень дорого и требует времени, пропорционального количеству файлов.
В вашем случае используется источник данных elastic-search
, время может бытьприписывается установлению соединения, сбору метаданных для выполнения распределенного сканирования и т. д., что зависит от коннектора Elastic serach.Мы можем включить журналы отладки и проверить дополнительную информацию.Если у эластичного поиска есть способ зарегистрировать полученный запрос, мы могли бы проверить в журналах эластичного поиска запросы, которые были сделаны после того, как load()
было запущено.