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 中估算缺失值
Scikit:从 imputer 而不是 Numpy Array 返回 Dataframe 的问题