Самый простой способ выполнить sh это с помощью функции stack()
, встроенной для зажигания sql.
val df = Seq((1, 2, 3), (4, 5, 6)).toDF("ColA", "ColB", "ColC")
df.show()
+----+----+----+
|ColA|ColB|ColC|
+----+----+----+
| 1| 2| 3|
| 4| 5| 6|
+----+----+----+
val df2 = df.select(expr("stack(3, ColA, 'ColA', ColB, 'ColB', ColC, 'ColC') as (NewColA, NewColB)"))
df2.show()
+-------+-------+
|NewColA|NewColB|
+-------+-------+
| 1| ColA|
| 2| ColB|
| 3| ColC|
| 4| ColA|
| 5| ColB|
| 6| ColC|
+-------+-------+
извините, примеры приведены в scala, но его легко перевести
Также возможно, хотя и более сложно и менее эффективно сделать это с .flatMap()
.