scala - Spark-sql/Scala 中的 Unpivot 列名称是数字

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

我已经尝试过这篇文章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 .

最佳答案

因为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   |
+---+----+----+

关于scala - Spark-sql/Scala 中的 Unpivot 列名称是数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62885140/

相关文章:

scala - 如何扁平化嵌套元组?

scala - Akka 的 mock child Actor

java - Java中spark实现中映射形成键/值对

python - 如何将数组(即列表)列转换为 Vector

apache-spark - Spark是否支持结构数组的列扫描修剪

scala - 如何加入 slick?

scala - 在Scala中如何将一个案例类转换为另一个不受代码更改字段添加影响的类?

java - 如何通过Spark submit传递外部参数

scala - 如何从Spark中的文本文件创建DataFrame

java - Apache Spark to_json 选项参数