【发布时间】:2016-03-21 11:01:31
【问题描述】:
我正在尝试过滤元组的 RDD,以根据键值返回最大的 N 个元组。我需要返回格式为 RDD。
所以RDD:
[(4, 'a'), (12, 'e'), (2, 'u'), (49, 'y'), (6, 'p')]
过滤最大的 3 个键应该返回 RDD:
[(6,'p'), (12,'e'), (49,'y')]
执行sortByKey() 然后take(N) 返回值并且不会导致RDD,所以这不起作用。
我可以返回所有的键,对它们进行排序,找到第 N 个最大值,然后在 RDD 中过滤大于该值的键值,但这似乎非常低效。
最好的方法是什么?
【问题讨论】:
-
为什么需要返回一个RDD?您是否采用了不适合单机内存的非常大的数字?如果你不是,你可以并行化返回的集合。
-
这个例子是从我的实际用例中简化而来的。我的键/值对的值是一个大向量,我想要来自数千个元组的数百个元组的子集。返回数百个这样的向量元组,然后将它们变成另一个 RDD 效率非常低。
标签: python apache-spark pyspark rdd