大數據解實例決topn問題


做大數據開發經常遇上在眾多數據中統計前幾的問題,比如王者榮耀每個區的富豪排行榜(騰訊可以做個刺激消費,😄)

我們在眾多數據中抽取了如下數據:

所在區,用戶名,每次充值數。(a,role1,158)(a,role1,15)(c,role1,18)(b,role3,123)

如上數據可以自行添加多條的hdfs上,不在敘述。

拿到數據首先我們需要分析我們最終要的到的數據的格式,每個區的富豪排行榜,那么首先要把每個人在每個區一共充值多

少錢進行累加,再對各個其進行分區,最終排序。業務很簡單,下面就為大家上干貨

rdd = sc.textFile('/user/hadoop/datas.txt')
rdd.take(10)
rdd = rdd.map(lambda x:x.split(","))
rdd = rdd.map(lambda x:((x[0],x[1]),int(x[2])))
rdd=rdd.groupByKey()
rdd=rdd.map(lambda x:((x[0],sum(list(x[1]))),''))
print(rdd.take(20))
def getPartition(key):
    s={'a':0,'b':1,'c':2,'d':3}
    return s.get(key[0][0])
def mysort(key):
    return key[1]    
rdd=rdd.repartitionAndSortWithinPartitions(numPartitions=4,partitionFunc=getPartition,ascending=False,keyfunc=mysort)
def topN(it):
    def my():
        for i in range(1,6):
            yield next(it)
    return my()
    
rdd = rdd.mapPartitions(topN)
rdd = rdd.map(lambda x:(x[0]))
rdd.collect()

等到如下形式的結果,你就可以面試大數據了,目前也就是這些差不多的工作

 


免責聲明!

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



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