Я пытаюсь найти лучший способ получить наибольшее значение в столбце данных Spark.
Рассмотрим следующий пример:
df = spark.createDataFrame([(1., 4.), (2., 5.), (3., 6.)], ["A", "B"])
df.show()
Что создает:
+---+---+
| A| B|
+---+---+
|1.0|4.0|
|2.0|5.0|
|3.0|6.0|
+---+---+
Моя цель - найти наибольшее значение в столбце A (при проверке это 3,0). Используя PySpark, я могу придумать четыре подхода:
# Method 1: Use describe()
float(df.describe("A").filter("summary = 'max'").select("A").first().asDict()['A'])
# Method 2: Use SQL
df.registerTempTable("df_table")
spark.sql("SELECT MAX(A) as maxval FROM df_table").first().asDict()['maxval']
# Method 3: Use groupby()
df.groupby().max('A').first().asDict()['max(A)']
# Method 4: Convert to RDD
df.select("A").rdd.max()[0]
Каждый из приведенных выше ответов дает правильный ответ, но в отсутствие инструмента профилирования Spark я не могу сказать, какой из них лучше.
Какие-либо идеи из интуиции или эмпиризма о том, какой из вышеперечисленных методов наиболее эффективен с точки зрения времени выполнения Spark или использования ресурсов, или есть ли более прямой метод, чем описанные выше?