我有一个Dataframedf如下
测向=
+---+---+----+---+---+
| a| b| c| d| e|
+---+---+----+---+---+
| 1| a|foo1| 4| 5|
| 2| b| bar| 4| 6|
| 3| c| mnc| 4| 7|
| 4| c| mnc| 4| 7|
+---+---+----+---+---+
我想实现像df1这样的目标=
+---+---+-----------------------------------------------+
| a| b| c |
+---+---+-----------------------------------------------+
| 1| a|{'a': 1, 'b': 'a', 'c': 'foo1', 'd': 4, 'e': 5}|
| 2| b|{'a': 2, 'b': 'b', 'c': 'bar', 'd': 4, 'e': 6} |
| 3| c|{'a': 3, 'b': 'c', 'c': 'mnc', 'd': 4, 'e': 7} |
| 4| c|{'a': 4, 'b': 'c', 'c': 'mnc', 'd': 4, 'e': 7} |
+---+---+-----------------------------------------------+
我真的想避免分组,所以我想首先将Dataframe转换成rdd,然后再将它们转换成一个Dataframe
我写的代码是
df2=df.rdd.flatMap(lambda x:(x.a,x.b,x.asDict()))
在df2上做foreach时,我得到的结果是rdd格式的,所以我试图用它创建一个Dataframe。
df3=df2.toDF() #1st way
df3=sparkSession.createDataframe(df2) #2nd way
但我在这两方面都犯了错误。有人能解释一下我在这里做错了什么,以及如何实现我的团聚吗
2条答案
按热度按时间pepwfjgg1#
可以使用spark sql执行以下操作:
Sparksql
输出
Dataframeapi
输出
dgtucam12#
可以从Map类型列创建json列
结果: