我试图在Spark中找到与top()
和take()
函数等效的解决方案,以实现Mapreduce。我想提取前k个值,而不保存整个键值对。
答案 0 :(得分:0)
没有直接的等效项。如果您需要在没有Spark的情况下做类似的事情,我通常会使用Pig
它至少需要两个map reduce阶段。一个处理数据,然后另一个收集您实际想要的数据
在映射器中,您将null设置为可写(或一些单值键),然后发出所有值,并将它们强制为单个化简器。
在化简器中,您将要排序或发出的所有值收集到有限大小的集合中。我建议使用TreeMap或Binary Heap,因为它们会自动排序。然后,为K个值循环遍历该集合的大小