新手在使用 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM