#scala #dataframe #apache-spark #join #dataset
#scala #фрейм данных #apache-spark #Присоединиться #набор данных
Вопрос:
Давайте рассмотрим:
val columnNames: Seq[String] = Seq[String]("col_1") // column present in DataFrame df
df.join(usingColumns = columnNames, right = ds)) // ds is some dataset that has exactly one column.
// the problem is about the fact that I don't know name of this column? I only know that
// df.col("col_1") and ds.col(???)` has the same types.
Возможно ли выполнить это объединение?
Ответ №1:
вы можете использовать что-то вроде :
утилиты пакетов
object Extensions {
implicit class DataFrameExtensions(df: DataFrame) {
def selecti(indices: Int*) = {
val cols = df.columns
df.select(indices.map(cols(_)):_*)
}
}
}
затем используйте это, чтобы выбрать столбец по номерам :
import utils.Extensions._
df.selecti(1,2,3)
Ответ №2:
Предполагая, что «col_1» из первого фрейма данных всегда будет присоединяться к одному столбцу в фрейме данных ds, вы можете просто переименовать столбец в фрейме данных ds в один столбец, как показано ниже. Тогда для вашего объединения с использованием имен требуется только ссылка «col_1»
// set the name of the column in ds to col_1
val ds2 = ds.toDF("col_1")
Ответ №3:
Вы можете изменить имя столбца набора данных на col_1
:
val result = df.join(ds.withColumnRenamed(ds.columns(0), "col_1"), "col_1", "right")