python字典上spark2提交的意外自动排序

python字典上spark2提交的意外自动排序,python,pyspark-sql,Python,Pyspark Sql,使用“spark2提交”时Python dict上出现意外排序行为 [tmp.py] d = { 'name': 'stackoverflow', 'email': 'atack@xxx.com', 'zip': '628888', } print(d) 期望值: { 'name': 'stackoverflow', 'email': 'atack@xxx.com', 'zip': '628888', } 实际值: { 'name':

使用“spark2提交”时Python dict上出现意外排序行为

[tmp.py]

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

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

{
    'name': 'stackoverflow',
    'email': 'atack@xxx.com',
    'zip': '628888',
}
-bash-4.1$spark2提交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或python3tmp.py”命令。这是个大故事。请忽略这一点。Python或Python3的方式,它的工作非常完美。我想通过spark2提交的方式使其正常工作

怀疑,根据实际结果:

  • 为什么它会自动排序。(据我所知,为了提高Spark侧的性能,可以应用此逻辑。如果曾经忽略。)
  • 如果一次排序,则不使用“key”(如果一次,则
    电子邮件应位于顶部)
  • 如果它在使用“值”时是明智的,那么
    628888
    应该位于顶部
  • 想知道它以何种方式应用排序功能以及如何停止自动排序。我需要的顺序与我们提供的输入相同


    谢谢,

    在python中,
    dict
    键没有定义的排序顺序。您可以使用OrderedICT来维护密钥顺序:

    例如:

    import collections
    
    orderedDict = collections.OrderedDict()
    orderedDict['name'] = 'stackoverflow'
    orderedDict['email'] = 'atack@xxx.com'
    orderedDict['zip'] = '628888'
    
    print(orderedDict)
    
    注意: 从Python3.7+开始,dict实际上保持了它们的键插入顺序。