如何在 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 中获取最大值并将其删除?的主要内容,如果未能解决你的问题,请参考以下文章
Apache Spark - 如何从两个 RDD 中获取不匹配的行