Beste Möglichkeit, den Maximalwert in einer Spark-Datenrahmenspalte zu ermitteln

Ich versuche, den besten Weg zu finden, um den größten Wert in einer Spark-Datenrahmenspalte zu erhalten.

Betrachten Sie das folgende Beispiel:

df = spark.createDataFrame([(1., 4.), (2., 5.), (3., 6.)], ["A", "B"])
df.show()

Welche erstellt:

+---+---+
|  A|  B|
+---+---+
|1.0|4.0|
|2.0|5.0|
|3.0|6.0|
+---+---+

Mein Ziel ist es, den größten Wert in Spalte A zu finden (bei Überprüfung ist dies 3,0). Mit PySpark habe ich vier Möglichkeiten:

# Method 1: Use describe()
float(df.describe("A").filter("summary = 'max'").select("A").collect()[0].asDict()['A'])

# Method 2: Use SQL
df.registerTempTable("df_table")
spark.sql("SELECT MAX(A) as maxval FROM df_table").collect()[0].asDict()['maxval']

# Method 3: Use groupby()
df.groupby().max('A').collect()[0].asDict()['max(A)']

# Method 4: Convert to RDD
df.select("A").rdd.max()[0]

Jeder der oben genannten gibt die richtige Antwort, aber da es kein Spark-Profilierungswerkzeug gibt, kann ich nicht sagen, welches das beste ist.

Haben Sie eine Vorstellung von der Intuition oder dem Empirismus, welche der oben genannten Methoden im Hinblick auf die Spark-Laufzeit oder die Ressourcennutzung am effizientesten ist, oder ob es eine direktere Methode als die oben genannten gibt?

Antworten auf die Frage(18)

Ihre Antwort auf die Frage