在学习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