So berechnen Sie den Mittelwert und die Standardabweichung gegeben PySpark DataFrame?
Habe ich PySpark DataFrame (nicht pandas) genannt df
, die ziemlich groß ist zu verwenden collect()
. Daher die unten angegebene code ist nicht effizient. Es war eine kleinere Datenmenge, aber jetzt scheitert es.
import numpy as np
myList = df.collect()
total = []
for product,nb in myList:
for p2,score in nb:
total.append(score)
mean = np.mean(total)
std = np.std(total)
Gibt es eine Möglichkeit zu bekommen mean
und std
als zwei Variablen mithilfe pyspark.sql.functions
oder ähnliches?
from pyspark.sql.functions import mean as mean_, std as std_
Könnte ich withColumn
allerdings gilt dieser Ansatz für die Berechnungen Zeile für Zeile, und es nicht wieder eine einzelne variable.
UPDATE:
Beispiel-Inhalt df
:
+----------+------------------+
|product_PK| products|
+----------+------------------+
| 680|[[691,1], [692,5]]|
| 685|[[691,2], [692,2]]|
| 684|[[691,1], [692,3]]|
Ich soll berechnen Sie Mittelwert und Standardabweichung der score
Werte, z.B. den Wert 1
im [691,1]
ist einer von erzielt.
- Können Sie geben eine Probe Ihrer Daten?
- Ich habe eine kleine Beispiel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die eingebauten Funktionen, um aggregierte Statistiken. Hier ist, wie man Mittelwert und die Standardabweichung.
Beachten Sie, dass es drei verschiedene Funktionen " Standardabweichung. Aus den docs, die ich verwendet (
stddev
) gibt das folgende Ergebnis zurück:Könnten Sie die
describe()
Methode als gut:Unter diesem link für mehr info: pyspark.sql.Funktionen
UPDATE: Dies ist, wie Sie arbeiten können, durch die verschachtelten Daten.
Verwenden
explode
zum extrahieren der Werte in separate Zeilen, dann rufen Siemean
undstddev
wie oben gezeigt.Hier ein MWE:
Welche Ausgänge:
Können Sie überprüfen, ob diese Werte korrekt sind, mit
numpy
:Erklärung: Ihr
"products"
Spalte ist einlist
vonlist
s. Aufrufexplode
wird eine neue Zeile für jedes element der äußerenlist
. Dann greifen die"score"
Wert von jeder der aufgelösten Zeilen, die Sie definiert haben, als Sie das zweite element in einer 2-elementlist
. Schließlich rufen Sie die Aggregatfunktionen auf diese neue Spalte.UnboundLocalError: local variable 'mean' referenced before assignment
.from pyspark.sql.functions import mean as _mean, stddev as _stddev
Für die Standardabweichung, bessere Art des Schreibens ist wie unten. Wir verwenden können, formatieren (auf 2 Dezimalstellen) und die Spalte Alias-Namen