Scala _* 到 select 数据框列列表

Scala _* to select a list of dataframe columns

我有一个数据框和一个这样的列列表:

import spark.implicits._
import org.apache.spark.sql.functions._

val df = spark.createDataFrame(Seq(("Java", "20000"), ("Python", "100000"))).toDF("language","users_count") 
val data_columns = List("language","users_count").map(x=>col(s"$x")) 

为什么这样做:

 df.select(data_columns:_ *).show()

但不是这个?

 df.select($"language", data_columns:_*).show()

报错:

 error: no `: _*' annotation allowed here
    (such annotations are only allowed in arguments to *-parameters) 

以及如何让它工作以便我可以使用 _* 来 select 列表中的所有列,但我还想在 select 中指定一些其他列?

谢谢!

更新:

根据下面@chinayangyangyong 的回答,我是这样解决的:

df.select( $"language" +: data_columns :_*)

这是因为 Dataframe 上没有带有签名 select(col: Column, cols: Column*): DataFrame 的方法,但是有一个带有签名 select(col: Column*): DataFrame 的方法,这就是您的第一个示例有效的原因。

有趣的是,如果您使用 String 到 select 列,您的第二个示例将起作用,因为有一个方法 select(col: String, cols: String*): DataFrame.

df.select(data_columns.head, data_columns.tail:_*),show()