Pyspark Dataframe Zuschreibungen — Ersetzen Unbekannt & Fehlende Werte mit der Spalte Bedeuten, basierend auf der angegebenen Bedingung

Gegeben ein Funken dataframe, ich möchte zur Berechnung einer Spalte bedeuten basiert auf der nicht-fehlenden und nicht unbekannte Werte für diese Spalte. Ich würde dann gerne diese bedeuten und es verwenden, um ersetzen Sie die Spalte fehlt & unbekannte Werte.

Zum Beispiel, vorausgesetzt, ich arbeite mit einem:

  • Dataframe namens df, wobei jeder Datensatz repräsentiert ein Individuum, und alle Spalten sind integer oder numeric
  • Spalte mit dem Alter (Altersgruppen, die für jeden Datensatz)
  • Spalte mit dem Namen missing_age (die ist gleich 1, wenn das Individuum hat kein Alter, sonst 0)
  • Spalte mit dem Namen unknown_age (die ist gleich 1, wenn das Individuum hat eine unbekannten Alters, 0 sonst)

Dann kann ich berechnen, bedeutet dies, wie unten gezeigt.

calc_mean = df.where((col("unknown_age") == 0) & (col("missing_age") == 0))
.agg(avg(col("age")))

ODER über SQL-und windows-Funktionen,

mean_compute = hiveContext.sql("select avg(age) over() as mean from df 
where missing_age = 0 and unknown_age = 0")

Ich nicht möchten, verwenden Sie SQL - /windows-Funktionen, wenn ich helfen kann. Meine Herausforderung wurde unter diesem Mittelwert und dem ersetzen der unbekannten/fehlenden Werte mit Hilfe von nicht-SQL-Methoden.

Ich habe versucht mit wenn(), where(), replace(), withColumn, UDFs, und Kombinationen... Egal was ich mache, entweder ich bekomme Fehler oder die Ergebnisse sind nicht das, was ich erwarte. Hier ist ein Beispiel für eines der vielen Dinge, die ich versucht habe, das hat nicht funktioniert.

imputed = df.when((col("unknown_age") == 1) | (col("missing_age") == 1),
calc_mean).otherwise("age")

Habe ich durchforstete das Internet, aber nicht gefunden haben, ähnlich wie die Zuschreibung Typ Fragen, so dass jede Hilfe wird sehr geschätzt. Es könnte etwas ganz einfaches sein, die ich verpasst habe.

Seitliche Anmerkung-ich bin versucht, diesen code, um alle Spalten in der Funke Dataframe, dass nicht unknown_ oder missing_ in der Spalte Namen. Kann ich nur wickeln Sie den Spark-code in einem Python 'for-Schleife' und eine Schleife durch alle Spalten anwendbar, dies zu tun?

UPDATE:

Auch herausgefunden, wie eine Schleife durch die Spalten... Hier ist ein Beispiel.

for x in df.columns:
    if 'unknown_' not in x and 'missing_' not in x:
        avg_compute = df.where(df['missing_' + x] != 1).agg(avg(x)).first()[0]
        df = df.withColumn(x + 'mean_miss_imp', when((df['missing_' + x] == 1), 
        avg_compute).otherwise(df[x]))
Schreibe einen Kommentar