7

私は Spark が初めてで、StandardScaler() を DataFrame の列に適用しようとしています。

+---------------+
|      DF_column|
+---------------+
| 0.114285714286|
| 0.115702479339|
| 0.267893660532|
|0.0730337078652|
| 0.124309392265|
| 0.365714285714|
| 0.111747851003|
| 0.279538904899|
| 0.134670487106|
| 0.523287671233|
| 0.404011461318|
|          0.375|
| 0.125517241379|
|0.0143266475645|
| 0.313684210526|
| 0.381088825215|
| 0.411428571429|
| 0.327683615819|
| 0.153409090909|
| 0.344827586207|
+---------------+

問題は、このように適用するとエラーが発生することです。

requirement failed: Input column DF_column must be a vector column.

UDF を使用してみましたが、まだ機能しません。

scaler = StandardScaler(inputCol='DF_column', 
    outputCol="scaledFeatures",withStd=True, withMean=False)

LIBSVM の例を実行しましたが、TXT ファイルが機能をベクトルとしてロードしているので簡単です。

4

1 に答える 1

15

スカラーの列がある場合、それStandardScalerは深刻なやり過ぎです。直接スケーリングできます。

from pyspark.sql.functions import col, stddev_samp

df.withColumn("scaled",
  col("DF_column") / df.agg(stddev_samp("DF_column")).first()[0])

ただし、最初にベクトルを組み立てるよりもスケーラーを本当に使用したい場合は、次のようにします。

from pyspark.ml.feature import VectorAssembler
from pyspark.ml.feature import StandardScaler

assembler = VectorAssembler(
  inputCols=["DF_column"], outputCol="features"
)

assembled = assembler.transform(df)

scaler = StandardScaler(
  inputCol="features", outputCol="scaledFeatures",
  withStd=True, withMean=False
).fit(assembled)

scaler.transform(assembled)
于 2016-03-09T06:55:20.120 に答える