为什么createDataFrame会对列重新排序?

时间:2017-09-27 13:39:16

标签: apache-spark pyspark apache-spark-sql

假设我正在从没有架构的列表中创建数据框:

data = [Row(c=0, b=1, a=2), Row(c=10, b=11, a=12)]
df = spark.createDataFrame(data)
df.show()
+---+---+---+
|  a|  b|  c|
+---+---+---+
|  2|  1|  0|
| 12| 11| 10|
+---+---+---+

为什么列按字母顺序重新排序?
我可以在不添加架构的情况下保留列的原始顺序吗?

1 个答案:

答案 0 :(得分:4)

  

为什么列按字母顺序重新排序?

由于使用Row sorts the arguments by name创建了**kwargs

需要此设计选项来解决PEP 468中描述的问题。请查看SPARK-12467进行讨论。

  

我可以在不添加架构的情况下保留列的原始顺序吗?

不在**kwargs。您可以使用普通tuples

df = spark.createDataFrame([(0, 1, 2), (10, 11, 12)], ["c", "b", "a"])

namedtuple

from collections import namedtuple

CBA = namedtuple("CBA", ["c", "b", "a"])
spark.createDataFrame([CBA(0, 1, 2), CBA(10, 11, 12)])