【发布时间】:2020-07-13 17:50:21
【问题描述】:
我有一个如下所示的数据框 df
df=
+---+---+----+---+---+
| 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} |
+---+---+-----------------------------------------------+
我真的很想避免 group by,所以我想首先将数据帧转换为 rdd,然后再将它们转换为一个数据帧
我写的代码是
df2=df.rdd.flatMap(lambda x:(x.a,x.b,x.asDict()))
在 df2 上执行 foreach 时,我得到的是 rdd 格式的结果 所以我尝试用它创建一个数据框。
df3=df2.toDF() #1st way
df3=sparkSession.createDataframe(df2) #2nd way
但是我在这两种方式中都遇到了错误。有人可以解释一下我在这里做错了什么以及如何实现我的重新定位
【问题讨论】:
-
你能把你遇到的错误粘贴在这里吗?
-
raise TypeError("Can not infer schema for type: %s" % type(row)) TypeError: Can not infer schema for type:
标签: python dataframe apache-spark pyspark