#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. Круто, спасибо. У меня действительно есть несколько строк в правой части фрейма данных. Поэтому я считаю, что это не должно иметь огромных последствий для производительности. Весь фрейм данных может быть загружен в память (я думаю, что широковещательные соединения будут работать здесь).