В стандартном SQL, когда вы присоединяете таблицу к себе, вы можете создавать псевдонимы для таблиц для отслеживания тех столбцов, на которые вы ссылаетесь:
SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE a.common_field = b.common_field;
Есть два способа, которыми я могу думать, чтобы достичь того же, используя Spark DataFrame
API:
Решение №1: переименовать столбцы
Для ответа на этот вопрос существует несколько различных методов. Это просто переименовывает все столбцы с определенным суффиксом:
df.toDF(df.columns.map(_ + "_R"):_*)
Например, вы можете:
df.join(df.toDF(df.columns.map(_ + "_R"):_*), $"common_field" === $"common_field_R")
Решение № 2: Скопируйте ссылку на DataFrame
Еще одно простое решение - просто сделать это:
val df: DataFrame = ....
val df_right = df
df.join(df_right, df("common_field") === df_right("common_field"))
Оба этих решения работают, и я мог видеть, что каждый из них полезен в определенных ситуациях. Существуют ли какие-либо внутренние различия между этими двумя, о которых я должен знать?