Как объединить фрейм данных с одностолбцовым набором данных без использования имен столбцов в наборе данных

#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")