我正在尝试编写一个简单的Scala程序,该程序最终将采用以逗号分隔的列列表作为参数。目的是简单地将动态列集从巨型数据框选择为新数据框。如果我对列的列表进行了硬编码,则可以:
df.select((Array("colA","colB")).map(df(_)) : _* ).show
所以现在我正试图从像"colA,colB"
这样的字符串中获取信息。这是我最近的努力:
val cols = "colA,colB"
//split to an array, end up with each element quoted
val colList = cols.split(",").mkString("'", "', '", "'")
df.select((Array(colList)).map(df(_)) : _* ).show
这给了我以下错误:
org.apache.spark.sql.AnalysisException:
Cannot resolve column name "'colA', 'colB'" among (<actual column list>)
这是正确的。没有名为该列的列。我尝试了其他一些不同的操作,但我不断收到此错误。
我在做什么错了?
答案 0 :(得分:2)
这足以选择正确的列:
val cols = "colA,colB"
val colList = cols.split(",") // This is already the right Array
df.select(colList).map(df(_)) : _* ).show
请勿使用:
val colList = cols.split(",")
val new_string = colList.mkString("'", "', '", "'") // This is "'colA', 'colB'"
df.select(Array(new_string)).map(df(_)) : _* ).show // Error