Запуск репликации строк со значениями столбца из другого набора данных

#apache-spark #apache-spark-sql

#apache-spark #apache-spark-sql

Вопрос:

Я пытаюсь реплицировать строки внутри набора данных несколько раз с разными значениями для столбца в Apache Spark. Допустим, у меня есть набор данных следующего вида

Набор данных A

 |  num  |  group |
|   1   |   2    |
|   3   |   5    |
  

Другой набор данных имеет разные столбцы

Набор данных B

 |  id  |
|   1  |
|   4  |
  

Я хотел бы реплицировать строки из набора данных A со значениями столбцов набора данных B. Вы можете указать соединение без каких-либо условных критериев, которые необходимо выполнить. Таким образом, результирующий набор данных должен выглядеть следующим образом.

 | id  |  num  |  group |
|  1  |   1   |   2    |
|  1  |   3   |   5    |
|  4  |   1   |   2    |
|  4  |   3   |   5    |
  

Кто-нибудь может подсказать, как можно достичь вышеуказанного? Насколько я понимаю, для объединения требуется соответствие условия и столбцов между двумя наборами данных.

Ответ №1:

То, что вы хотите сделать, вызывается CartesianProduct и df1.crossJoin(df2) достигнет этого. Но будьте осторожны с этим, потому что это очень сложная операция.

Комментарии:

1. Круто, спасибо. У меня действительно есть несколько строк в правой части фрейма данных. Поэтому я считаю, что это не должно иметь огромных последствий для производительности. Весь фрейм данных может быть загружен в память (я думаю, что широковещательные соединения будут работать здесь).