2015-09-18 59 views
1

我有一個Apache的日誌文件,我想獲取訪問量最大的網頁,然後打印前1000個訪問量最大的網頁的訪問量。如何打印Spark的輸出?

我不知道spark庫的輸出類型是什麼,matplotlib庫給了我錯誤。 您能否幫我解釋一下如何轉換輸出的類型並打印相關圖形。

from __future__ import print_function 
import sys 
import re 
import matplotlib.pyplot as plt 
from random import random 
from operator import add 
from pyspark import SparkContext 
if __name__ == "__main__": 
    sc = SparkContext(appName="WordCount") 
    lines = sc.textFile("/home/globalscratch/wikipedia_small.txt") 


    def getwords(line): 
     words = line.split(" ") 
     totalwords = 0 
     out = [] 
     for word in words: 
      if len(word) >= 1: 
       out += [ word.lower() ] 
     return out 


    words = lines.flatMap(getwords)  
    wordse = words.map(lambda x : [x , 1]).reduceByKey(add)   
    s = wordse.map(lambda x : [x[1]]).sortBy(lambda x : x[0] , False) 
    for i in s.take(1000): 
     print (i) 
plt.plot(s) 
plt.show() 

#stop Spark content                               
sc.stop() 

的繪圖功能是打印輸出前的是:

[1833572] 

[951269] 

[745503] 

[675384] 

[555030] 

[507073] 

[261436] 

[236230] 

[225914] 

[199161] 

.... 

回答

0

在行

s = wordse.map(lambda x : [x[1]]).sortBy(lambda x : x[0] , False) 

map功能的RDD只映射到計數(因爲這個詞本身是在X [0])。然後計數被排序。因此,你的輸出是計數。

對於

wordse = words.map(lambda x : [x , 1]).reduceByKey(add) 

你需要

for s in wordse.takeOrdered(1000, lambda x: -x[1]): 
    print s 

lambda - 函數這裏是AA定製的比較,將通過值排序行之後你的目的降序排列(即由字計數)(或嚴格來說,按升序排除負字數)

+0

使用當前代碼我可以打印列表,我需要繪製一個圖形,並且出現錯誤。 –

+0

然後你可以發佈'wordse.takeOrdered(10,lambda x:-x [1])'的輸出並指定你想要哪種類型的繪圖 – lanenok