【问题标题】:Pyspark preserving the order of fields when converting dataframe rows to dictionaryPyspark 在将数据帧行转换为字典时保留字段的顺序
【发布时间】:2020-04-08 21:42:25
【问题描述】:

我有一个包含以下数据的数据框 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】:

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

    from collections import OrderedDict
    ...
    map(lambda row: OrderedDict(zip(df.columns, list(row))), df.collect())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      相关资源
      最近更新 更多