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