Unpivot в spark-sql / Scala имена столбцов - числа - PullRequest
0 голосов
/ 14 июля 2020

Я пробовал встроенную функцию стека, описанную в этом посте Unpivot in spark-sql / pyspark for Scala, и отлично работает для каждого из столбцов, идентифицированных кодом, который содержит букву, но не в тех столбцах, где код представляет собой просто число.

У меня есть df-кадр данных, который выглядит как this

Я применил, как указано в связанном ответе:

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

И результат - это

Я хочу, чтобы значение строки 234 было 0 , как и должно быть .

1 Ответ

1 голос
/ 14 июля 2020

Поскольку 234 - это число и In 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   |
+---+----+----+
...