Можете ли вы сделать широковещательное соединение с SparkR?

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

Однако я не смог найти функцию трансляции в документации SparkR.

Итак, мне интересно, можете ли вы сделать широковещательное соединение с SparkR?


person Tonnam Balankura    schedule 30.06.2017    source источник


Ответы (1)


Spark 2.3: в этом запросе на вытягивание будет создана broadcast функция: https://github.com/apache/spark/pull/17965/files

Искра 2.2:

Вы можете предоставить пользовательскую подсказку для запроса:

head(join(df, hint(avg_mpg, "broadcast"), df$cyl == avg_mpg$cyl))

Ссылка: этот код: https://github.com/apache/spark/blob/master/R/pkg/R/DataFrame.R#L3740

Функция широковещательной рассылки в Java, Scala и Python API также является оболочкой для добавления широковещательной подсказки. Подсказка означает, что оптимизатор получает дополнительную информацию: этот DataFrame маленький, я - пользователь - гарантирую это, вы должны сделать трансляцию перед объединением с другими DataFrames.

Примечание. Spark иногда автоматически выполняет широковещательное присоединение. Вы можете управлять конфигурацией автоматических широковещательных соединений, установив:

spark.sql("SET spark.sql.autoBroadcastJoinThreshold = -1")

Здесь -1 означает, что ни один DataFrame не будет транслироваться для использования Broadcast Join. Подробнее об этой теме можно прочитать здесь

person T. Gawęda    schedule 30.06.2017
comment
Что с подсказкой? - person eliasah; 30.06.2017
comment
подсказка — это функция, доступная в Spark 2.2. - person T. Gawęda; 30.06.2017