2017-09-27 12 views
2

は、私は、スキーマなしでリストからデータフレームを作成していたとしますなぜcreateDataFrameは列の順序を変更しますか?

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| 
+---+---+---+ 

はなぜ列はアルファベット順に並べ替えていますか?
スキーマを追加せずに列の元の順序を保持できますか?

+4

あなたが行うことはできませんdf.select( "A、B、C")を示しますが、プレーンtuplesを使用することができますか。? –

答えて

3

なぜ列がアルファベット順に並んでいますか?

**kwargssorts the arguments by nameで作成されたです。

PEP 468に記載されている問題に対処するには、この設計方法が必要です。議論についてはSPARK-12467をチェックしてください。

スキーマを追加せずに列の元の順序を保持できますか?

**kwargsではありません。

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)]) 
関連する問題