簡體   English   中英

Scala _* 到 select dataframe 列的列表

[英]Scala _* to select a list of dataframe columns

我有一個 dataframe 和這樣的列列表:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM