Ich versuche, gewichtetes Mittel in pyspark zu berechnen, aber nicht viele FortschritteBerechnung gewichteten Mittelwert in PySpark
# Example data
df = sc.parallelize([
("a", 7, 1), ("a", 5, 2), ("a", 4, 3),
("b", 2, 2), ("b", 5, 4), ("c", 1, -1)
]).toDF(["k", "v1", "v2"])
df.show()
import numpy as np
def weighted_mean(workclass, final_weight):
return np.average(workclass, weights=final_weight)
weighted_mean_udaf = pyspark.sql.functions.udf(weighted_mean,
pyspark.sql.types.IntegerType())
machen, aber wenn ich versuche, diesen Code
df.groupby('k').agg(weighted_mean_udaf(df.v1,df.v2)).show()
Ich erhalte die auszuführen Fehler
Meine Frage ist, kann ich eine benutzerdefinierte Funktion (mit mehreren Argumenten) als Argument angeben zu agg? Wenn nicht, gibt es eine Alternative, um Operationen wie das gewichtete Mittel nach der Gruppierung mit einem Schlüssel durchzuführen?
Meinen Sie die 'weighted_mean' Funktion außer Kraft zu setzen? –
Was ich tun möchte, ist a) groupby b) führen Sie eine Operation abhängig von mehreren Spalten des Datenrahmens. Der gewichtete Mittelwert ist nur ein Beispiel. – MARK
Ich denke, was @ cricket_007 bedeutete ist, Sie absichtlich überschreiben 'weighted_mean' durch diese Zeile' weighted_mean = pyspark.sql.functions.udf (weighted_mean, 'oder es ist ein Tippfehler? – akarilimano