Saya mencoba memilih kolom dari Scala Spark DataFrame menggunakan nama kolom tunggal dan nama yang diekstraksi dari Daftar. Solusi saya saat ini terlihat seperti:

var cols_list = List("d", "e")

df
.select(
    col("a"),
    col("b"),
    col("c"),
    cols_list.map(col): _*)

Namun, itu menimbulkan kesalahan:

<console>:81: error: no `: _*' annotation allowed here
(such annotations are only allowed in arguments to *-parameters)
               cols_list.map(col): _*
                                        ^

Bantuan apa pun akan dihargai

0
itscarlayall 12 Mei 2021, 09:29

2 jawaban

Jawaban Terbaik

select menerima List[Column], jadi Anda perlu membuat dan menyediakan daftar itu, mis.

df.select(col("a") :: col("b") :: col("c") :: cols_list.map(col): _*)
2
mck 12 Mei 2021, 07:36

Kode Anda berfungsi dengan baik untuk saya, Anda juga dapat menggunakan notasi $.

scala> df.select(cols_list.map(col):_*)
res8: org.apache.spark.sql.DataFrame = [d: int, e: int]

scala> df.select(cols_list.map(c => $"$c"):_*)
res9: org.apache.spark.sql.DataFrame = [d: int, e: int]

Mungkin Anda hanya perlu import spark.implicits._

EKSTRA: Periksa juga nama variabel Anda, ini adalah konvensi penamaan di scala untuk menggunakan kasing unta dan coba hindari var (ini hanya masalah praktik yang baik, tidak terkait dengan kesalahan Anda sama sekali)

val colsList = List("d", "e")
0
SCouto 12 Mei 2021, 07:02