开发者社区 问答 正文

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

我有一个包含以下数据的数据框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()方法以外,还有其他方法可以实现此目的吗?

展开
收起
几许相思几点泪 2019-12-16 20:20:38 895 分享
分享
版权
举报
阿里云 AI 助理回答

在Python中,如果你使用的是Pandas库来处理数据框(DataFrame),你可以直接利用to_dict()函数,并通过指定orient参数来保持原数据列的顺序。以下是一个示例代码段,展示如何实现你的需求:

import pandas as pd

# 假设df是你的DataFrame
data = {'Name': ['a', 'b', 'c', 'd'],
        'Value': [1, 2, 3, 4],
        'Code': [1, 1, 2, 2]}
df = pd.DataFrame(data)

# 转换为字典,保持列的顺序
dict_list = df.to_dict(orient='records')

print(dict_list)

这段代码会输出你想要的结果格式,其中字典列表中的每个字典都按照df中的列顺序排列。orient='records'参数保证了每一行转换成一个字典,并且列的顺序被保留。

如果你是在使用Spark DataFrame(从你的尝试代码来看似乎是这样),那么在Spark 2.x及以上版本中,asDict()方法默认应该已经按照DataFrame的列顺序来生成字典了。但如果你发现顺序不对,可能是因为内部实现或环境配置的原因。不过,通常情况下,Spark DataFrame转换为字典时确实会保持列的原始顺序。

如果上述方法不能满足你的需求,或者你遇到了特定环境下的问题,确保你的Spark版本是最新的,并检查是否有其他代码逻辑影响了列的排序。在大多数标准使用场景下,直接使用.collect()后对每个Row对象调用.asDict()应该是能够保持DataFrame列顺序的。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: