0
平均を差し引き、各列のstddevで割ることで、スパークデータフレーム内の複数の列の値を正規化しようとしています。私は私がこれを行うことができると信じてDataFrame APIのみで複数の列の値を正規化する
+------------------------------+------------------------------+
|(A - (avg(A)/stddev_pop(A)))|(B - (avg(B)/stddev_pop(B)))|
+------------------------------+------------------------------+
| -1.414213562| -1.414213562|
| -0.707106781| -0.707106781|
| 0| 0|
| 0.707106781| 0.707106781|
| 1.414213562| 1.414213562|
+------------------------------+------------------------------+
:私は願ってい
+------------------------------+------------------------------+
|(A - (avg(A)/stddev_pop(A)))|(B - (avg(B)/stddev_pop(B)))|
+------------------------------+------------------------------+
| null| null|
+------------------------------+------------------------------+
:私は結果を与える
from pyspark.sql import Row
from pyspark.sql.functions import stddev_pop, avg
df = spark.createDataFrame([Row(A=1, B=6), Row(A=2, B=7), Row(A=3, B=8),
Row(A=4, B=9), Row(A=5, B=10)])
exprs = [x - (avg(x))/stddev_pop(x) for x in df.columns]
df.select(exprs).show()
:ここでのコードは、私がこれまで持っていますStandardScaler mllibのクラスですが、可能ならばデータフレームAPIだけを使ってこれを行うことを好むでしょう。
答え hereのおかげで
可能な重複[各グループのスパークSQLでのzスコアを作成する方法](http://stackoverflow.com/questions/ 36807937/how-to-create-z-score-in-spark-sql-for-each-group) –
@LostInOverflow確かに近いですが、私の使用例では複数の列を正規化する必要がありました – MarkNS