【问题标题】:Unpivot in spark-sql/Scala column names are numbersspark-sql/Scala 中的反透视列名是数字
【发布时间】:2020-07-13 22:20:18
【问题描述】:

我已经尝试了这篇文章Unpivot in spark-sql/pyspark 中针对 Scala 描述的内置堆栈函数,并且对于使用包含字母的代码标识的每一列都可以正常工作,但在代码只是数字的那些列中则不行。

我有一个看起来像的数据框 df this

我按照链接答案中的说明申请了:

val result = df.select($"Id", expr("stack(3, '00C', 00C, '0R5', 0R5, '234', 234)"))

结果is this one

我想要的是第 234 行的值是 0 as it should be

【问题讨论】:

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


    【解决方案1】:

    因为 234 是数字 & 在 SQL 中,如果您选择任何数字,它将返回与值相同的数字,您需要告诉编译器 234 是列名而不是数字,您必须使用数字周围的反引号 (`),即 `234`

    检查下面的代码。

    scala> val df = Seq(("xyz",0,1,0)).toDF("Id","00C","0R5","234")
    df: org.apache.spark.sql.DataFrame = [Id: string, 00C: int ... 2 more fields]
    
    scala> df.select($"Id", expr("stack(3, '00C', 00C, '0R5', 0R5, '234',`234`)")).show(false)
    +---+----+----+
    |Id |col0|col1|
    +---+----+----+
    |xyz|00C |0   |
    |xyz|0R5 |1   |
    |xyz|234 |0   |
    +---+----+----+
    

    【讨论】:

    • 在这上面花了很多时间,你的回答有帮助!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    相关资源
    最近更新 更多