【问题标题】:Spark Convert Data Frame Column to dense Vector for StandardScaler() "Column must be of type org.apache.spark.ml.linalg.VectorUDT"Spark将数据帧列转换为StandardScaler()的密集向量“列必须是org.apache.spark.ml.linalg.VectorUDT类型”
【发布时间】:2016-06-23 06:54:42
【问题描述】:

我对 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 文件将特征加载为向量。

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-sql apache-spark-ml


    【解决方案1】:

    如果你有一列标量,那么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)
    

    【讨论】:

    • 我只想说,这是一个很好的答案,但我有一个关于如何整合这个答案的问题,在你同时拥有数字和分类特征的情况下,你最终会得到两个很多密集的向量......只是,我不能问你,因为 StackOverflow 已经导致你从平台上辞职。我希望 StackOverflow 能看到这一点,并且知道他们通过迫使高级代表用户(在这种情况下是特定技术的代言人)让社区变得更糟。无论如何感谢 zero323。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2017-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    相关资源
    最近更新 更多