Ошибки соединения слева: org.apache.spark.sql.AnalysisException: обнаружено неявное декартово произведение для ЛЕВОГО ВНЕШНЕГО соединения между логическими планами

#apache-spark #pyspark #apache-spark-sql

#apache-spark #pyspark #apache-spark-sql

Вопрос:

*** Редактировать

 df_joint = df_raw.join(df_items,on='x',how='left') 
 

Названное исключение возникло в Apache Spark 2.4.5

df_raw содержит данные из 2 столбцов «x», «y», а df_items — пустой фрейм данных схемы с некоторыми другими столбцами

соединение по левому краю выполняется для значения null, которое должно получить все данные из 1-го фрейма данных с нулевыми столбцами из 2-го фрейма данных.

Он полностью работает нормально, когда «X» равно float, однако, когда я приводил «X» к строке его ошибки неявного декартова произведения

я получил эту ошибку с помощью spark 2.4.5.

Почему это происходит и как решить эту проблему, не включив перекрестное соединение spark spark.conf.set("spark.sql.crossJoin.enabled", "true")

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

1. Почему бы не использовать явное df_raw.crossJoin(df_items) ?

2. перекрестное соединение @mazaneicha приведет к дублированию столбца x

3. Столбец может быть удален перед присоединением, тем более что я подозреваю, что он существует только для того, чтобы было над чем выполнять левое соединение.

Ответ №1:

Может быть ошибка в Spark, но если вы просто хотите добавить столбцы, вы можете сделать следующее:

 import pyspark.sql.functions as F

df_joint = df_raw.select(
    '*',
    *[F.lit(None).alias(c) for c in df_items.columns if c not in df_raw.columns]
)