簡體   English   中英

如何打印Spark的輸出?

[英]How to print the output of Spark?

我有一個Apache的日志文件,我想獲取訪問量最大的網頁,然后打印前1000個訪問量最大的網頁的訪問次數。

我不知道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]

....

在行中

  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 -function是一個自定義比較器,它將按值(即按字數)按降序排序(或者嚴格來說按負數按升序排序)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM