在Spark dataframe列中获取最大值的最佳方法

12 浏览
0 Comments

在Spark dataframe列中获取最大值的最佳方法

我正在尝试找出在Spark dataframe列中获取最大值的最佳方法。考虑以下示例:

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,我有以下四种方法:

# 方法1:使用describe()
float(df.describe("A").filter("summary = 'max'").select("A").first().asDict()['A'])
# 方法2:使用SQL
df.registerTempTable("df_table")
spark.sql("SELECT MAX(A) as maxval FROM df_table").first().asDict()['maxval']
# 方法3:使用groupby()
df.groupby().max('A').first().asDict()['max(A)']
# 方法4:转换为RDD
df.select("A").rdd.max()[0]

以上每种方法都给出了正确的答案,但在没有Spark性能分析工具的情况下,我无法确定哪种方法最好。根据直觉或经验,对于Spark运行时或资源使用,上述方法中哪种最有效,或者是否有比上述方法更直接的方法?

0