Pyspark数据框:无法解析计算列的平均值/平均值/聚合(包括空值)

时间:2020-05-29 17:38:02

标签: exception pyspark casting apache-spark-sql dataset

我正在运行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可以正常工作。

任何人都可以建议我,如何用列的平均值替换列中的空值。

1 个答案:

答案 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。