2016-10-31 7 views
0

私は、Pythonを使用してSPARK DataFrameの列を正規化しようとしています。SPARK Dataframeの列をスケール(正規化)する - Pyspark

マイセット:このデータセットで

-------------------------- 
userID|Name|Revenue|No.of.Days| 
-------------------------- 
1  A  12560 45 
2  B  2312890 90 
.  .  .  . 
.  .  .  . 
.  .  .  . 
-------------------------- 

は、ユーザーIDと名前を除いて、私は収入とは、No.of日数を正規化する必要があります。

出力は計算したり、各列の値を正規化することは、私はPySparkを使用しての簡単な手順でこれを行うことができますどのように

val = (ei-min)/(max-min) 
ei = column value at i th position 
min = min value in that column 
max = max value in that column 

であるために使用されるこの


userID|Name|Revenue|No.of.Days| 
-------------------------- 
1  A  0.5  0.5 
2  B  0.9  1 
.  .  1  0.4 
.  .  0.6  . 
.  .  .  . 
-------------------------- 

式のようになります。 ?このよう

+0

入力の簡単な例と予想される出力を追加してください – Yaron

+0

私が言及したデータフレームは入力です。出力も追加します。 –

+0

@JackDaniel解決策を見つけましたか?私も同様の問題に直面しています。 – thetna

答えて

2

:あなたはスケーリングされた列ごと

scaler = MinMaxScaler(inputCol="Revenue", outputCol="scaledRevenue") 
scalerModel = scaler.fit(dataFrame) 
scaledData = scalerModel.transform(dataFrame) 

繰り返します。

+0

MinMaxScalerはベクトルデータの列に対してのみ機能します。この答えは、オペラのように浮動小数点の列に対しては機能しません。 – mrjrdnthms

1

あなたは、単にこれは、列norm_valを持つ新しいデータフレームを返します.withColumn()

df.withColumn('norm_val', (df.val-min)/(max-min)) 

を使用することができます。 withColumnの文書hereを参照してください。

+0

それは動作しませんでした。この場合、最小値と最大値を定義する必要なしに何が分かりますか? – Omri374

+0

スパークはここで最小値と最大値を知らない。 '.withColumn'を実行する前にminとmaxを定義する必要があります。 – GuySake

関連する問題