在學習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