【问题标题】:Select dynamic set of columns from dataframe从数据框中选择动态列集
【发布时间】:2019-08-20 23:35:24
【问题描述】:

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

这当然是正确的。没有名为那个的列。我尝试了其他一些不同的方法,但我不断收到此错误。
我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    这足以选择正确的列:

    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 
    

    【讨论】:

    • 伙计,我把事情复杂化了,谢谢!只要允许,我就会接受。
    猜你喜欢
    • 2023-02-01
    • 2021-10-20
    • 1970-01-01
    • 2020-12-26
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    相关资源
    最近更新 更多