har*_*bcn 4 python apache-spark apache-spark-sql pyspark apache-spark-ml
我是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|
+---------------+
Run Code Online (Sandbox Code Playgroud)
问题是像这样应用它会给我一个错误,"要求失败:输入列DF_column必须是一个向量列".我尝试使用UDF,但仍然无法正常工作.
scaler = StandardScaler(inputCol='DF_column',
outputCol="scaledFeatures",withStd=True, withMean=False)
Run Code Online (Sandbox Code Playgroud)
我做了LIBSVM的例子,但这很简单,TXT文件正在将功能加载为Vectors.
如果你有一列标量,那么StandardScaler
就是严重的过度杀伤力.您可以直接缩放:
from pyspark.sql.functions import col, stddev_samp
df.withColumn("scaled",
col("DF_column") / df.agg(stddev_samp("DF_column")).first()[0])
Run Code Online (Sandbox Code Playgroud)
但如果你真的想使用缩放器而不是先组合一个矢量:
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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7512 次 |
最近记录: |