在 Spark 数据框列中获取最大值的最佳方法

新手上路,请多包涵

我正在尝试找出在 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 运行时或资源使用方面最有效的直觉或经验主义的任何想法,或者是否有比上述方法更直接的方法?

原文由 xenocyon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 644
2 个回答
>df1.show()
+-----+--------------------+--------+----------+-----------+
|floor|           timestamp|     uid|         x|          y|
+-----+--------------------+--------+----------+-----------+
|    1|2014-07-19T16:00:...|600dfbe2| 103.79211|71.50419418|
|    1|2014-07-19T16:00:...|5e7b40e1| 110.33613|100.6828393|
|    1|2014-07-19T16:00:...|285d22e4|110.066315|86.48873585|
|    1|2014-07-19T16:00:...|74d917a1| 103.78499|71.45633073|

>row1 = df1.agg({"x": "max"}).collect()[0]
>print row1
Row(max(x)=110.33613)
>print row1["max(x)"]
110.33613

答案与方法3几乎相同。但似乎可以删除 method3 中的“asDict()”

原文由 Burt 发布,翻译遵循 CC BY-SA 3.0 许可协议

数据框特定列的最大值可以通过使用 -

 your_max_value = df.agg({"your-column": "max"}).collect()[0][0]

原文由 Rudra Prasad Samal 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题