Ignite Spark Dataframe медленная производительность - PullRequest
0 голосов
/ 10 октября 2018

Я пытался улучшить производительность некоторого существующего фрейма данных spark, добавив в него ignite.Следующий код - это то, как мы в настоящее время читаем фрейм данных

   val df = sparksession.read.parquet(path).cache()

Мне удалось сохранить и загрузить фрейм данных spark из ignite, как показано в следующем примере: https://apacheignite -fs.readme.io / docs / ignite-data-реперов .Следующий код показывает, как я делаю это сейчас с помощью ignite

  val df = spark.read()
  .format(IgniteDataFrameSettings.FORMAT_IGNITE())              //Data source 
  .option(IgniteDataFrameSettings.OPTION_TABLE(), "person")     //Table to read.
  .option(IgniteDataFrameSettings.OPTION_CONFIG_FILE(), CONFIG) //Ignite config.
  .load();
  df.createOrReplaceTempView("person");

SQL-запросов (например, выберите a, b, c из таблицы, где x) на кадре данных ignite работает, но производительность намного ниже, чем одна искра (т.е.без воспламенения (непосредственно запрос DF), запрос SQL часто занимает от 5 до 30 секунд, и обычно только в 2 или 3 раза медленнее искра.Я заметил, что для каждого запроса происходит обмен данными (более 100 МБ +) между контейнером зажигания и контейнером искры.Запрос с тем же «где», но меньшим результатом обрабатывается быстрее.В целом, я чувствую, что ignite dataframe поддерживает простую обертку поверх spark.Следовательно, в большинстве случаев это медленнее, чем одна искра.Правильно ли мое понимание?

Кроме того, следуя примеру кода, когда кеш создается в ignite, он автоматически получает имя типа «SQL_PUBLIC_name_of_table_in_spark».Поэтому я не смог изменить конфигурацию кеша в xml (поскольку мне нужно указать имя кеша в xml / code, чтобы настроить его, и ignite пожалуется, что он уже существует) Ожидается ли это?

Спасибо

1 Ответ

0 голосов
/ 11 октября 2018

Прежде всего, не похоже, что ваш тест честный.В первом случае вы предварительно выбираете данные Parquet, кэшируете их локально в Spark и только затем выполняете запрос.В случае Ignite DF вы не используете кэширование, поэтому данные выбираются во время выполнения запроса.Как правило, вы не сможете кэшировать все свои данные, поэтому производительность с Parquet значительно снизится, как только некоторые данные понадобятся во время выполнения.

Однако с Ignite вы можете использовать индексирование для повышения производительности.,Для этого конкретного случая вы должны создать индекс в поле x, чтобы избежать сканирования всех данных при каждом выполнении запроса.Вот информация о том, как создать индекс: https://apacheignite -sql.readme.io / docs / create-index

...