Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Spark将StandardScaler()的数据帧列转换为密集向量;列的类型必须为org.apache.spark.ml.linalg.VectorUDT“;_Python_Apache Spark_Pyspark_Apache Spark Sql_Apache Spark Ml - Fatal编程技术网

Python Spark将StandardScaler()的数据帧列转换为密集向量;列的类型必须为org.apache.spark.ml.linalg.VectorUDT“;

Python Spark将StandardScaler()的数据帧列转换为密集向量;列的类型必须为org.apache.spark.ml.linalg.VectorUDT“;,python,apache-spark,pyspark,apache-spark-sql,apache-spark-ml,Python,Apache Spark,Pyspark,Apache Spark Sql,Apache Spark Ml,我是Spark的新手,我正在尝试将StandardScaler()应用于数据帧中的列 +---------------+ | DF_column| +---------------+ | 0.114285714286| | 0.115702479339| | 0.267893660532| |0.0730337078652| | 0.124309392265| | 0.365714285714| | 0.111747851003| | 0.279538904899| | 0.13467

我是Spark的新手,我正在尝试将StandardScaler()应用于数据帧中的列

+---------------+
|      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|
+---------------+
问题是这样应用它会给我一个错误:

要求失败:输入列DF\u列必须是向量列。

我尝试使用UDF,但仍然不起作用

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

我做了LIBSVM的例子,但这很容易,因为TXT文件将特性加载为向量。

如果有一列标量,那么
StandardScaler
是一个严重的过度使用。您可以直接缩放:

from pyspark.sql.functions import col, stddev_samp

df.withColumn("scaled",
  col("DF_column") / df.agg(stddev_samp("DF_column")).first()[0])
但如果您真的想使用scaler,而不是首先组装向量:

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)

我只想说,这是一个很好的答案,但我有一个问题,关于如何整合这个答案,在一个既有数字特征又有分类特征的情况下,这样你就得到了两堆密集向量。。。只是,我不能这样问你,因为StackOverflow已经让你辞职了。我希望StackOverflow能看到这一点,并知道他们通过驱逐高代表性用户(在这种情况下,他们是特定技术的代言人)而让社区的情况变得更糟。谢谢你。