Pyspark在将数据帧行转换为字典时保留字段的顺序

问题描述 投票:0回答:1

我有一个包含以下数据的数据框df:

Name        Value     Code
a           1         1
b           2         1
c           3         2
d           4         2

我想将此数据帧转换为字典。我尝试使用asDict():

 map(lambda row: row.asDict(), df.collect())

它给出以下输出:

[{'Code': 1, 'Name': u'a', 'Value': 1}, {'Code': 1, 'Name': u'b', 'Value': 2}, {'Code': 2, 'Name': u'c', 'Value': 3}, {'Code': 2, 'Name': u'd', 'Value': 4}]

此处对字段进行排序。但是我想保留字段的顺序。

我的输出应如下所示:

[{'Name': u'a', 'Value': 1,'Code': 1}, {'Name': u'b', 'Value': 2,'Code': 1}, {''Name': u'c', 'Value': 3,Code': 2}, {'Name': u'd', 'Value': 4,'Code': 2}]

除了使用asDict()方法以外,还有其他方法可以实现此目的吗?

python dataframe apache-spark pyspark
1个回答
0
投票

在python中,dict没有任何顺序概念。您需要使用OrderedDict。你可以做这样的事情

from collections import OrderedDict
...
map(lambda row: OrderedDict(zip(df.columns, list(row))), df.collect())
© www.soinside.com 2019 - 2024. All rights reserved.