Pyspark Dataframe: невозможно вычислить среднее / средн. / Агг. Столбца (включая пустые значения) - PullRequest
0 голосов
/ 29 мая 2020

Я выполняю задание по склеиванию, и мой набор данных содержит столбец с несколькими пустыми значениями. На момент запуска поискового робота в наборе данных тип данных для столбца обозначен как 'double'.
При замене пустых значений средним значением столбца я не могу вычислить среднее значение, поскольку в нем говорится, что среднее / avg / agg может применяться только к столбцу numeri c.

И при выполнении Typecast в 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;

Однако при ручном удалении пустых значений среднее работает нормально.

Может ли кто-нибудь предложить мне, как заменить пустые значения в столбце средним значением столбца.

1 Ответ

0 голосов
/ 30 мая 2020

Используйте Импьютер оценщик для вменения пропущенных значений. Вы можете использовать следующий пример кода:

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.

...