Spark Imputer 归因估算器 补全缺失值

Posted asker009

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark Imputer 归因估算器 补全缺失值相关的知识,希望对你有一定的参考价值。

1、概念

Imputer估计器使用缺失值所在列的平均值或中位数来完成数据集中的缺失值。输入列应为DoubleType或FloatType。

当前,Imputer不支持分类特征,并且可能为包含分类特征的列创建不正确的值。

Imputer可以通过.setMissingValue(custom_value)插入“ NaN”以外的自定义值。例如,.setMissingValue(0)将重算所有出现的(0)。 请注意,输入列中的所有空值都被视为丢失,因此也会被估算

2、code

package com.home.spark.ml

import org.apache.spark.SparkConf
import org.apache.spark.ml.feature.Imputer
import org.apache.spark.sql.SparkSession

/**
  * @Author: xu.dm
  * @Date: 2020/1/18 11:46
  * @Version: 1.0
  * @Description: 实验性的功能
  * 用于使用缺失值所在列的平均值或中位数来完成缺失值的归因估算器。 输入列应为DoubleType或FloatType。
  * 当前,Imputer不支持分类功能(SPARK-15041),并且可能为分类功能创建了错误的值。
  * 注意,均值/中值是在滤除缺失值之后计算的。
  * 输入列中的所有Null值都被视为丢失,因此也会被估算。 为了计算中位数,使用DataFrameStatFunctions.approxQuantile的相对误差为0.001。
  **/
object Ex_Imputer {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf(true).setMaster("local[2]").setAppName("spark ml")
    val spark = SparkSession.builder().config(conf).getOrCreate()

    val df = spark.createDataFrame(Seq(
      (1.0, Double.NaN),
      (2.0, Double.NaN),
      (Double.NaN, 3.0),
      (4.0, 4.0),
      (5.0, 5.0)
    )).toDF("a", "b")

    val imputer = new Imputer()
      .setInputCols(Array("a", "b"))
      .setOutputCols(Array("out_a", "out_b"))
      .setMissingValue(Double.NaN)
      .setStrategy()

    val model = imputer.fit(df)
    model.transform(df).show()

    spark.stop()
  }
}

+---+---+-----+-----+
|  a|  b|out_a|out_b|
+---+---+-----+-----+
|1.0|NaN|  1.0|  4.0|
|2.0|NaN|  2.0|  4.0|
|NaN|3.0|  3.0|  3.0|
|4.0|4.0|  4.0|  4.0|
|5.0|5.0|  5.0|  5.0|
+---+---+-----+-----+

以上是关于Spark Imputer 归因估算器 补全缺失值的主要内容,如果未能解决你的问题,请参考以下文章

如何获取每个分区的最后一个值以在 Spark SQL 中估算缺失值

python中的缺失值插补

Scikit:从 imputer 而不是 Numpy Array 返回 Dataframe 的问题

Imputer 具有不同类型的值

使用sklearn中preprocessing.Imputer实现对缺失值的处理

Scikit-learn Imputer 降维