我正在运行Glue作业,并且我的数据集包含具有很少的空值的列。从在数据集上运行搜寻器开始,该列的数据类型被标识为``双精度''。
当用Column的平均值替换空值时,我无法计算平均值,因为它说mean / avg / agg只能应用于数字列。
在对IntegerType或DecimalType进行类型转换时
dataframe_temp = dataframe.withColumn("col_1",dataframe["col_1"].cast(IntegerType()))
得到错误为:AnalysisException: "cannot resolve 'CAST(`col_1` AS INT)' due to data type mismatch: cannot cast struct<double:double,string:string> to int;
但是,手动删除空值时,mean可以正常工作。
任何人都可以建议我,如何用列的平均值替换列中的空值。
答案 0 :(得分:0)
使用Imputer估算器来估算缺失值。您可以按以下方式使用示例代码-
val df = spark.createDataFrame(Seq(
(1.0, 0),
(2.0, 0),
(0, 3.0),
(4.0, 4.0),
(5.0, 5.0)
)).toDF("_c1", "_c2")
val imputer = new Imputer()
.setStrategy("mean") // supported mode "mean"/"median"
.setMissingValue(0)
.setInputCols(Array("_c1","_c2"))
.setOutputCols(Array("_c1_out","_c2_out"));
val transformedData = imputer.fit(df).transform(df)
请注意-输入列应为DoubleType或FloatType。