spark sql/Scala中的Unpivot列名是数字
我已经尝试了本文中针对Scala介绍的内置堆栈函数,对于使用包含字母的代码标识的每一列都可以很好地工作,但对于代码仅为数字的列则不行 我有一个数据帧df,看起来像 我申请了链接答案中提到的:spark sql/Scala中的Unpivot列名是数字,scala,apache-spark,apache-spark-sql,stack,unpivot,Scala,Apache Spark,Apache Spark Sql,Stack,Unpivot,我已经尝试了本文中针对Scala介绍的内置堆栈函数,对于使用包含字母的代码标识的每一列都可以很好地工作,但对于代码仅为数字的列则不行 我有一个数据帧df,看起来像 我申请了链接答案中提到的: val result = df.select($"Id", expr("stack(3, '00C', 00C, '0R5', 0R5, '234', 234)")) 结果呢 我想要的是第234行的值是0。因为234是数字&在SQL中,如果您选择任何数字,它将返回
val result = df.select($"Id", expr("stack(3, '00C', 00C, '0R5', 0R5, '234', 234)"))
结果呢
我想要的是第234行的值是0。因为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 |
+---+----+----+