Обмен данными между исполнителями в Apache Spark

Мой проект SPARK (написанный на Java) требует доступа (результаты запроса SELECT) к различным таблицам между исполнителями.

Одним из решений этой проблемы является:

  1. Я создаю tempView
  2. выберите необходимые столбцы
  3. используя forEach конвертировать DataFrame в Map,
  4. передать эту карту как широковещательную переменную между исполнителями.

Тем не менее, я обнаружил, что

  1. Есть много сложных запросов, результат которых не может быть сохранен непосредственно в Map
  2. Таблицы очень большие и, следовательно, создают Map большого размера и передача его исполнителям как широковещательная переменная не звучит эффективно.

Вместо этого мы можем загрузить таблицы в памяти, используя load которые могут быть разделены между исполнителями?

Является void org.apache.spark.sql.Dataset.createOrReplaceTempView(String viewName)

или же void org.apache.spark.sql.Dataset.createGlobalTempView(String viewName) throws AnalysisException

Метод полезен для этого?

SPARK VERSION: 2.3.0

1 ответ

Решение

Вы можете транслировать DataFrame. Смотрите документацию

Другие вопросы по тегам