从数据框中选择动态列集

时间:2019-08-20 15:20:04

标签: scala apache-spark apache-spark-sql

我正在尝试编写一个简单的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>)

这是正确的。没有名为该列的列。我尝试了其他一些不同的操作,但我不断收到此错误。
我在做什么错了?

1 个答案:

答案 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 
相关问题