新手在使用 Spark RDD 获取排序后前 N 数据时遇到的一个坑

在学习Spark的过程中,写程序统计单词数量的时候,突然想把统计后的(单词, 次数) 这样的集合根据各单词出现的次数从高到低倒序排列。于是在网上查了下有sortBy()函数可以实现。试了下没问题。然而由于单词过多,排序后打印出来的结果过长,于是想取前 10 条来验证,自然地想到使用top()函数,在 Spark Shell 中尝试了,也确实有这个函数,但是得到的结果却并不是次数最高的单词,多试了几次发现是根据单词排序后的前 10。觉得很不解。

明明是先根据次数排序再取 top,为什么得到的结果却是根据单词排序后的结果呢?后来在这篇文章中得到了结果。作者看了源码发现,在调用 top 函数时,后台会根据 key 做一次排序,就会把我这里先根据次数排序的效果给打消。而正确的做法是使用 take() 函数:

count.sortBy(_._2, false).take(10)

这样就可以得到想要的结果了

参考:https://blog.csdn.net/dai451954706/article/details/52668258

posted @ 2021-02-19 16:15  东围居士  阅读(1073)  评论(0编辑  收藏  举报