gpt4 book ai didi

python - Spark2-submit 对 python 字典进行意外的自动排序

转载 作者:行者123 更新时间:2023-12-01 07:26:33 24 4
gpt4 key购买 nike

使用“spark2-submit”时 Python dict 上出现意外的排序行为。

[tmp.py]

d = {
'name': 'stackoverflow',
'email': 'atack@xxx.com',
'zip': '628888',
}
print(d)

预期:

{
'name': 'stackoverflow',
'email': 'atack@xxx.com',
'zip': '628888',
}

实际:

> -bash-4.1$spark2-submit tmp.py

{'name': 'stackoverflow', 'zip': '628888', 'email': 'atack@xxx.com'}
19/08/08 09:33:35 INFO util.ShutdownHookManager: Shutdown hook called
19/08/08 09:33:35 INFO util.ShutdownHookManager: Deleting directory /tmp/spark-9bb6bd82-ba2c-4715-b27a-6fdc41d3297b
-bash-4.1$

我处于无法使用“python 或 python3 tmp.py”命令的情况。这是一个大故事。请忽略这一点。 Python 或 Python3 方式,它运行完美。我想让它通过 spark2-submit 方式工作。

基于实际结果的疑问:

  1. 为什么会自动排序。 (根据我的理解,为了提高Spark端的性能,可能会应用这个逻辑。如果一旦忽略。)
  2. 如果排序一次,则不会使用“key”(如果排序一次,则 email 应位于顶部)
  3. 如果一旦明智地使用“值”,那么 628888 应该位于顶部。

想知道它以何种方式应用排序功能以及如何停止这种自动排序。我需要的顺序与我们作为输入给出的顺序相同。

谢谢

最佳答案

在 python 中,dict 键没有定义的排序顺序。您可以使用 OrderedDict 来维护键顺序: https://docs.python.org/2/library/collections.html#collections.OrderedDict

示例:

import collections

orderedDict = collections.OrderedDict()
orderedDict['name'] = 'stackoverflow'
orderedDict['email'] = 'atack@xxx.com'
orderedDict['zip'] = '628888'

print(orderedDict)

注意:从 Python3.7+ 开始,字典实际上保留了它们的键插入顺序。 https://mail.python.org/pipermail/python-dev/2017-December/151283.html

关于python - Spark2-submit 对 python 字典进行意外的自动排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57415372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com