Ответ 1
Существует по крайней мере два разных способа, с помощью которых вы можете подойти либо путем сглаживания:
df.as("df1").join(df.as("df2"), $"df1.foo" === $"df2.foo")
или с использованием основанного на имени равенства:
// Note that it will result in ambiguous column names
// so using aliases here could be a good idea as well.
// df.as("df1").join(df.as("df2"), Seq("foo"))
df.join(df, Seq("foo"))
В общем переименование столбцов, в то время как самый уродливый, является самой безопасной практикой во всех версиях. Было несколько ошибок, связанных с разрешением столбца (мы нашли один на SO не так давно), и некоторые детали могут различаться между синтаксическими анализаторами (HiveContext
/standard SQLContext
), если вы используете сырые выражения.
Лично я предпочитаю использовать псевдонимы, потому что их сходство с идиоматическим SQL и возможность использования вне области конкретных объектов DataFrame
.
Что касается производительности, если вы не заинтересованы в обработке в реальном времени, не должно быть никаких различий в производительности. Все они должны генерировать один и тот же план выполнения.