Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
spark sql/Scala中的Unpivot列名是数字_Scala_Apache Spark_Apache Spark Sql_Stack_Unpivot - Fatal编程技术网

spark sql/Scala中的Unpivot列名是数字

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中,如果您选择任何数字,它将返回

我已经尝试了本文中针对Scala介绍的内置堆栈函数,对于使用包含字母的代码标识的每一列都可以很好地工作,但对于代码仅为数字的列则不行

我有一个数据帧df,看起来像

我申请了链接答案中提到的:

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