假设我正在从没有架构的列表中创建数据框:
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|
+---+---+---+
为什么列按字母顺序重新排序?
我可以在不添加架构的情况下保留列的原始顺序吗?
答案 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)])