如何在 spark rdd 中获取最大值并将其删除?

Posted

技术标签:

【中文标题】如何在 spark rdd 中获取最大值并将其删除?【英文标题】:how to get max value in spark rdd and remove it? 【发布时间】:2016-01-25 07:54:59 【问题描述】:

有一个RDD对象:

//have some data in RDD[(Int, Int)] object
(1, 2)
(3, 2)
(2, 3)
(5, 4)
(2, 7)
(5, 2)
(5, 7)

我想得到max key并去掉它,max key是5,所以我想要的结果是:

//a new RDD object,RDD[(Int, Int)]
(1, 2)
(3, 2)
(2, 3)
(2, 7)

你能帮帮我吗?谢谢!

【问题讨论】:

【参考方案1】:

你需要先把结果排序,然后用RDD.max()得到最高值,最后用filter过滤除最高key以外的key。

您也可以将其注册为DataFrame 并执行简单的SQL 查询以获取结果。

【讨论】:

在使用max之前不需要对RDD进行排序 @MateuszDymczyk - 感谢您的纠正。你是对的,我们在使用 max 时不需要任何排序。排序在max 中隐式执行。 实际上不,排序不会在任何地方执行,因为它没有必要并且速度较慢(最好是 nlogn)。您可以使用线性排序函数简单地减少整个 RDD @Sumit 我可以在火花流中使用 max() 函数吗? max() 可用于 RDD API,因此在 Streaming 中您需要执行 Dstream.foreachRDD ,然后对于每个 RDD 您可以使用 max 函数。

以上是关于如何在 spark rdd 中获取最大值并将其删除?的主要内容,如果未能解决你的问题,请参考以下文章

获取 RDD 中每个键的最大值和最小值

Apache Spark - 如何从两个 RDD 中获取不匹配的行

Spark RDD详解

在 Spark 中何时持久化以及何时取消持久化 RDD

如何从 Spark 中的 Slaves 内存中创建 RDD?

在 Spark 中对 RDD 执行 group by 并将每个组写入单独的 Parquet 文件