Scala Spark DataFrame: dataFrame.выбрать несколько столбцов с указанием последовательности имен столбцов

val columnName=Seq("col1","col2",....."coln");

Есть ли способ выполнить операцию dataframe.select, чтобы получить dataframe, содержащий только указанные имена столбцов. Я знаю, что могу сделать dataframe.select("col1","col2"...) но columnName генерируется во время выполнения. Я мог бы сделать dataframe.select() несколько раз для каждого имени столбца в цикле. Будут ли у него какие-то служебные накладные расходы?. Есть ли еще один простой способ сделать это?

Ответы

Ответ 1

val columnNames = Seq("col1","col2",....."coln")

// using the string column names:
val result = dataframe.select(columnNames.head, columnNames.tail: _*)

// or, equivalently, using Column objects:
val result = dataframe.select(columnNames.map(c => col(c)): _*)

Ответ 2

Так как dataFrame.select() ожидает последовательность столбцов как парм, поэтому, поскольку у нас есть последовательность строк, преобразуйте последовательность строк в список Col и преобразовайте этот список в последовательность так

columnName.map(name => col (name)): _ *
дает последовательность столбцов из последовательности строк, и это передается в качестве параметров в dataFrame.select()

  val columnName=Seq("col1","col2");
  val DFFiltered = DF.select(columnName.map(name => col(name)):_*)