在 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)
我在 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)