如何打印Spark的输出?

时间:2015-09-18 04:46:57

标签: python matplotlib printing pyspark

我有一个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]

....

1 个答案:

答案 0 :(得分: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 - 这里的函数是一个自定义比较器,它将按值(按字数统计)按降序排序(或严格来说,按负数字计数按升序排序)