[英]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.