Scala Spark DataFrame:dataFrame.select给定列名称序列的多个列

时间:2016-03-21 12:59:45

标签: scala apache-spark dataframe apache-spark-sql

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

是否有办法执行dataframe.select操作以获取仅包含指定列名的数据帧。 我知道我可以做dataframe.select("col1","col2"...)columnName是在运行时生成的。 我可以在循环中为每个列名重复dataframe.select()。它会有任何性能开销吗?还有其他更简单的方法来实现这个目标吗?

3 个答案:

答案 0 :(得分:45)

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)): _*)

答案 1 :(得分:2)

由于dataFrame.select()需要一系列列并且我们有一系列字符串,我们需要将序列转换为List col并将该列表转换为序列。 columnName.map(name => col(name)): _*从字符串序列中提供一系列列,这可以作为参数传递给select()

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

答案 2 :(得分:0)

或者,你也可以这样写

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