У меня есть два кадра данных:
- Первый кадр данных
DFNum
имеет 48 столбцов и 58500 строк. - Второй кадр данных
DFString
имеет 7 столбцов и 58500 строк.
Столбцы обоих фреймов данных отличаются друг от друга. Моя цель - просто объединить два фрейма данных в один, содержащий 55 столбцов (48 + 7) и всегда 58500 строк, сохраняя порядок, который они имели до объединения.
Я сделал несколько попыток, тоже читая другие вопросы, но безуспешно. В частности, я попытался:
val df = DFNum.join(DFString)
, и это дает мне следующую ошибку: Detected implicit cartesian product for INNER join between logical plans. Join condition is missing or trivial. Join condition is missing or trivial. Either: use the CROSS JOIN syntax to allow cartesian products between these relations, or: enable implicit cartesian products by setting the configuration variable spark.sql.crossJoin.enabled=true;
.
Очевидно, что при перекрестном соединении я получаю намного больше строк, чем хочу: 58500 * 58500 строк .
Затем я попытался отредактировать df, добавив равный столбец id
к обоим фреймам данных, чтобы объединить: val tmpNum = DFNum.withColumn("id", monotonically_increasing_id())
val tmpString = DFString.withColumn("id", monotonically_increasing_id())
и использовать:
val df = tmpNum.join(tmpString)
и это дает мне следующую ошибку: USING column `id` cannot be resolved on the left side of the join. The left-side columns:[...]
.
Я также попробовал несколько типов объединений (все с tmpNum
и tmpString
и DFNum
и DFString
), например: val df = tmpNum.join(tmpString, Seq("id"), "outer")
val df = tmpNum.join(tmpString, Seq("id"), "full_outer")
и др. c. но я всегда получаю одну и ту же ошибку USING column `id` cannot be resolved on the left side of the join. The left-side columns:[...]
.
(Очевидно, с tmpNum
и tmpString
общее количество столбцов нового информационного кадра будет еще одним. Позже я опущу столбец id
).
Если у кого-то есть идеи или предложения, я был бы признателен.