что делает load () в spark? - PullRequest
       31

что делает load () в spark?

0 голосов
/ 29 июня 2019

искра ленивая, верно?так что же делает load()?

start = timeit.default_timer()

 df = sqlContext.read.option(
     "es.resource", indexes
 ).format("org.elasticsearch.spark.sql")
 end = timeit.default_timer()

 print('without load: ', end - start) # almost instant
 start = timeit.default_timer()

 df = df.load()
 end = timeit.default_timer()
 print('load: ', end - start) # takes 1sec

 start = timeit.default_timer()

 df.show()
 end = timeit.default_timer()
 print('show: ', end - start) # takes 4 sec

Если show() является единственным действием, я бы предположил, что load не займет много времени, как 1сек.Итак, я прихожу к выводу load() - это действие (в отличие от преобразования в искре)

Загружает ли загрузка целые данные в память?Я так не думаю, но тогда что это делает?

Я искал и смотрел на документ https://spark.apache.org/docs/latest/sql-data-sources-load-save-functions.html, но это не помогает ..

Ответы [ 2 ]

2 голосов
/ 30 июня 2019

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() было запущено.

0 голосов
/ 29 июня 2019

ничего не делает. Это просто часть sqlContext.read в качестве параметра, который вы не указали непосредственно для чтения. read позволяет указывать форматы данных. DF или лежащий в основе RDD оценивается как говорится лениво.

...