मैं एक सूची से निकाले गए एकल कॉलम नाम और नाम दोनों का उपयोग करके स्कैला स्पार्क डेटाफ्रेम से कॉलम का चयन करने का प्रयास कर रहा हूं। मेरे वर्तमान समाधान इस तरह दिखते हैं:

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

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

हालांकि, यह एक त्रुटि फेंकता है:

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

किसी भी तरह की सहायता को आभार समझेंगे

0
itscarlayall 12 मई 2021, 09:29

2 जवाब

सबसे बढ़िया उत्तर

select एक List[Column] स्वीकार करता है, इसलिए आपको उस सूची को बनाने और प्रदान करने की आवश्यकता है, उदा।

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

आपका कोड मेरे लिए ठीक काम कर रहा है, आप $ नोटेशन का भी उपयोग कर सकते हैं।

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]

शायद आपको बस import spark.implicits._

अतिरिक्त: अपने चर नामों की भी जांच करें, यह स्कैला में नामकरण परंपरा है। ऊंट केस का उपयोग करने के लिए और var से बचें (यह सिर्फ एक अच्छा अभ्यास मुद्दा है, आपकी त्रुटि से बिल्कुल भी संबंधित नहीं है)

val colsList = List("d", "e")
0
SCouto 12 मई 2021, 10:02