Ваш needed_columns
имеет тип List[Column]
, поэтому вы можете просто использовать needed_columns: _*
в качестве аргументов для select
:
val df = Seq((1, "x", 10.0), (2, "y", 20.0)).toDF("a", "b", "c")
import org.apache.spark.sql.Column
val needed_columns: List[Column] = List(new Column("a"), new Column("b"))
df.select(needed_columns: _*)
// +---+---+
// | a| b|
// +---+---+
// | 1| x|
// | 2| y|
// +---+---+
Обратите внимание, что select занимает дватипы аргументов:
def select(cols: Column*): DataFrame
def select(col: String, cols: String*): DataFrame
Если у вас есть список имен столбцов типа String
, вы можете использовать последний select
:
val needed_col_names: List[String] = List("a", "b")
df.select(needed_col_names.head, needed_col_names.tail: _*)
Или вы можете отобразитьсписок от String
с до Column
с для использования прежнего select
df.select(needed_col_names.map(col): _*)