2016-11-10 4 views
0

次のコードは、データフレームを完全な形式で設定しますが、列に「正しく」名前を付ける必要があります。get_dummiesの代わりにSpark Pivotを使用する

df = spark.createDataFrame([ 
    (0, "X", "a"), 
    (1, "Z", "b"), 
    (2, "X", "b"), 
    (3, "X", "c"), 
    (4, "Y", "c"), 
    (5, "Y", "a") 
], ["id","category", "other_thing"]) 

pivotDF = df.groupBy("id").pivot("category").count() 

pivotDF.show() 

+---+----+----+----+ 
| id| X| Y| Z| 
+---+----+----+----+ 
| 0| 1|null|null| 
| 5|null| 1|null| 
| 1|null|null| 1| 
| 3| 1|null|null| 
| 2| 1|null|null| 
| 4|null| 1|null| 
+---+----+----+----+ 

私は出力としてこれを必要になります

+---+-------------+-------------+-------------+ 
| id| category_X| category_Y| category_Z| 
+---+-------------+-------------+-------------+ 
| 0| 1   |   null|   null| 
| 5|null   |   1|   null| 
| 1|null   |   null|   1| 
| 3| 1   |   null|   null| 
| 2| 1   |   null|   null| 
| 4|null   |   1|   null| 
+---+-------------+-------------+-------------+ 

私はプログラム的に列名を追加することができますどのように(つまり、私は手動で、この場合の「カテゴリ」で入力する必要はありません

答えて

2

名前を変更することができます:

>>> pivot_col = "category" 
>>> pivotDF = df.groupBy("id").pivot(pivot_col).count() 
>>> new_names = pivotDF.columns[:1] + \ 
... ["{0}_{1}".format(pivot_col, c) for c in pivotDF.columns[1:]] 
>>> pivotDF.toDF(*new_names) 
+0

Thxを@LostInOverflowあなたのコードが動作します(あなたがAを追加する必要があるものの、 ")"、最後の行に0123。 「カテゴリ」部分をプログラムで追加できる必要があるため、私は自分の質問を編集するつもりだと言いました。 –

関連する問題