2016-05-29 11 views
2

現在、データフレームを入力として受け取るpyspark.ml.clustering.KMeansモジュールを使用するには、RDDをcontingency tableに変換しようとしています。RDDからコンティンジェンシーへの変換テーブル:Pyspark

私は次のような構造が見えmyrdd.take(K)、(Kは、いくつかの番号です)を実行します。

[[u'user1' 、( 'ITM1'、3)、...、( 'ITM2を( 'itm2'、2)、...、uuuser2 '、(' itm1 '、7)、...、 (' itm2 '、4)]、...、[u'usern' )、...、( 'itm3'、10)]]

各リストには、最初の要素としてエンティティが含まれ、このエンティティが気に入ったすべての項目とその数の集合がタプル。

私の目的は、上記のコンティンジェンシーテーブルに似ているDataFrameのスパークに変換することです。

+----------+------+----+-----+ 
|entity |itm1 |itm2|itm3 | 
+----------+------+----+-----+ 
| user1 |  3| 1| 0| 
| user2 |  7| 4| 0| 
| usern |  0| 2| 10| 
+----------+------+----+-----+ 

次のリンクで引用されたように私はdf.stat.crosstabメソッドを使用しています

Statistical and Mathematical Functions with DataFrames in Apache Spark - 4. Cross Tabulation (Contingency Table)

、それは私が欲しいものとほぼ近いです。

しかし、もう一つのカウントフィールド上記タプルのように存在する場合、すなわち、('itm1',3)分割表(またはエンティティ項目マトリックス)の最終結果には、この値を組み込む(または追加)する方法。

もちろん、私は上記のRDDのリストを行列に変換し、それらをcsvファイルとして書き込んだ後、DataFrameとして読み戻します。

DataFrameを使用して簡単に行う方法はありますか?

+1

可能な重複/ question/30244910/pivot-spark-dataframe) – zero323

+0

この質問は「直接」重複していますが、[リンク提供](http://stackoverflow.com/a/35676755/3415409)では@ zero323に同意しません。代替手段tを供給するoあなたが探していることをやる。 – eliasah

+0

この質問への答えは私のここ最近の質問から見ることができます[RDDからデータフレームへの変換](http://stackoverflow.com/questions/37552052/convert-a-rdd-of-tuples-of-varying-データ・フレーム・イン・スパーク(data-in-spark))。これはもともとはRDD構造をデータフレームに変換することを意図していましたが、pivoting、groupby、sumを使用する答えの最後の部分がこの問題の解決策を提供します。もし誰かが重複していると感じたら、私は現在の質問を閉じます。 – Rkz

答えて

0

RDDからcreateDataFrame()メソッドを使用してデータフレームをpysparkに変換します。

クロスメソッドを使用した後にshowメソッドを使用します。表形式で表示するには

cf = train_predictions.crosstab("prediction","label_col") 

:次の例を参照してください

cf.show() 

出力:[ピボットスパークDATAFRAME](http://stackoverflow.comの

+--------------------+----+----+ 
|prediction_label_col| 0.0| 1.0| 
+--------------------+----+----+ 
|     1.0| 752|1723| 
|     0.0|1830| 759| 
+--------------------+----+----+ 
関連する問題