在 Spark scala 逻辑中转置

Transpose in Spark scala logic

我在 spark scala 数据框中有以下数据框:

-------------
a | b| c| d |
-------------
1 | 2| 3 | 4 |
5 | 6| 7 | 8 |
9 | 10| 11 | 12 |
13 | 14| 15 | 16 |

根据我的代码,它变成了每一行的地图,我尝试的代码是:

df.select(map(df.columns.flatMap(c => Seq(lit(c),col(c))):_*).as("map"))
Map(String-> String) with 4 records only
Map(a->1,b->2,c->3,d->4)
Map(a->5,b->6,c->7,d->8)
Map(a->9,b->10,c->11,d->12)
Map(a->13,b->14,c->15,d->16)

但我想像下面这样改变:

a->1
b->2 
c->3
d->4
a->5
b->6 
c->7
d->8
a->9
b->10 
c->11
d->12
a->13
b->14
c->15
d->16

对 change/add 代码的任何建议以获得所需的结果,我认为它应该是任何转置逻辑我是 scala 的新手。

使用 explode 在代码下方分解地图 data.Try。

df.select(map(df.columns.flatMap(c => Seq(lit(c),col(c))):_*).as("map"))
.select(explode($"map"))
.show(false)

没有map使用array

val colExpr = array(
    df
    .columns
    .flatMap(c => Seq(struct(lit(c).as("key"),col(c).as("value")).as("map"))):_*
).as("map")
df
.select(colExpr)
.select(explode($"map").as("map"))
.select($"map.*").show(false)