当前位置: 首页 > 知识库问答 >
问题:

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

田硕
2023-03-14

我试图找出在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|
+---+---+
# 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运行时或资源使用而言,上述哪种方法最有效,或者是否有比上述方法更直接的方法,有任何来自直觉或经验主义的想法?

共有1个答案

洪伟彦
2023-03-14
>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()”似乎可以删除

 类似资料:
  • 问题内容: 我正在尝试找出在Spark dataframe列中获得最大值的最佳方法。 考虑以下示例: 哪个创建: 我的目标是在A列中找到最大值(通过检查,这是3.0)。使用PySpark,我可以想到以下四种方法: 上面的每一个都给出了正确的答案,但是在没有Spark分析工具的情况下,我无法确定哪个是最好的。 从直觉或经验主义的观点来看,就Spark运行时或资源使用而言,上述哪种方法最有效,或者是否

  • 我有下面的代码,其中计算最小和最大订单项目从列表并按预期工作。我想知道是否可以进一步重构/改进,使其更优化和高性能地处理数千或订单列表。 我故意不做 Collections.min(itemFrequencyMap.values()) 和 因为它需要对所有值进行两次迭代,然后再次循环遍历 以查找值和的条目。

  • 问题内容: 我有以下格式的多维列表: 如何获得所有子列表的第三个值的最大值。用伪代码: 我知道这可以通过遍历列表并将第三个值提取到新列表中,然后简单地执行来完成,但是我想知道是否可以使用lambda或列表理解来完成? 问题答案: 只需与生成器表达式一起使用: 另外,不要命名您的变量,而是要隐藏类型。

  • 本文向大家介绍C#获取数组中最大最小值的方法,包括了C#获取数组中最大最小值的方法的使用技巧和注意事项,需要的朋友参考一下 根据下面函数获取数组中最大最小值即可。调用时候直接传数组范围一个float类型的变量  

  • 问题内容: 我在想这样的事情: 但是也不是null安全的,这也是我想要的。 您知道解决此问题的更好方法吗? 编辑: 评论之后,我还尝试了min(): 你对那个怎么想的? 问题答案: Collections.max有什么问题? 您为什么还要担心无效安全性?您确定要允许null出现在您的收藏夹中吗?

  • 问题内容: 桌子: 我想获取UserId,每个UserId的max(Date)值。即,具有最新日期的每个UserId的值。有没有一种方法可以简单地在SQL中做到这一点?(最好是Oracle) 更新: 对于任何歧义,我们深表歉意:我需要获取所有UserIds。但是对于每个UserId,仅该用户具有最新日期的那一行。 问题答案: 这将检索其my_date列值等于该用户ID的my_date最大值的所有行