簡體   English   中英

spark-sql/Scala 中的反透視列名是數字

[英]Unpivot in spark-sql/Scala column names are numbers

我已經嘗試了內置堆棧 function 在這篇文章Unpivot in spark-sql/pyspark for Scala 中描述,並且對於使用包含字母的代碼標識的每個列都可以正常工作,但在代碼只是數字的那些列中則不行.

我有一個看起來像這樣的 dataframe df

我按照鏈接答案中的說明申請:

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

結果就是這個

我想要的是第 234 行的值應該是 0。

因為234是數字 & 在 SQL 中,如果您是 select 任何數字,它將返回與值相同的數字,您需要告訴編譯器 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   |
+---+----+----+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM