您好,登錄后才能下訂單哦!
如何進行spark在日志分析系統里的簡單應用 ,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
1.下載spark和運行
wget http://apache.fayea.com/apache-mirror/spark/spark-1.0.0/spark-1.0.0-bin-hadoop2.tgz
我這里下載的是1.0.0版,由于我們只是測試spark的用法所以不需要配置spark集群,只需把下好的文件解壓,進入bin/文件夾。
spark支持scala,java和python。
scala和java輸入命令:./spark-shell python 輸入命令 ./pyspark 進入控制臺,我們以python為例:
很簡單無需任何配置,好的開始是成功的一半,我們繼續。
2.簡單應用
讀取文本文件,我們還是以之前的日志文件為例:
>>>file = sc.textFile("/home/hadoop/20130207.txt")
PS:python是大小寫敏感的;路徑要給全,否則默認是你運行命令時的那個路徑;python2.7.X版本對編碼支持一直是個問題,請盡量統一源文件的編碼,如"utf-8".
顯示總行數:
>>> file.count()
265063
顯示第一行內容:
>>>file.first()
得到所有被ie8訪問的url的計數:
>>>file.filter(lambda line : "MSIE 8.0" in line).count()
98670
Ps: lambda 是匿名函數的寫法;filter默認輸入的是整行,上述代碼的意思遍歷每一行并計算出包含“MSIE 8.0”字符串的行數和。
得到擁有最多字段數的那行的字段個數:
>>> file.map(lambda line : len(line.split("|"))).reduce(lambda a,b: a if a>b else b )
Ps:map(lambda line : len(line.split("|")))是把每行分割成集合并返回集合的成員數;
python中的reduce內建函數是一個二元操作函數,他用來將一個數據集合(鏈表,元組等)中的所有數據進行下列操作:用傳給reduce中的函數 func()(必須是一個二元操作函數)先對集合中的第1,2個數據進行操作,得到的結果再與第三個數據用func()函數運算,最后得到一個結果。
統計每個字符串(字段內容)出現的次數:
file.flatMap(lambda line :line.split("|")).map(lambda word:(word,1)).reduceByKey(lambda a,b:a+b).collect()
結果顯示的數據太多了,精神崩潰~~,換個方式~
統計每個字符串(字段內容)出現的次數,并顯示出現最多個10個字符串:
>>>file.flatMap(lambda line :line.split("|")).map(lambda word:(word,1)).reduceByKey(lambda a,b:a+b).map(lambda (k,v):(v,k)).sortByKey().top(10)
sortByKey是根據鍵值排序,top是提取前X個記錄,跟hive中的limit 類似。由于spark中沒有sortByValue方法,所以在排序前先把key和value互換。
關于如何進行spark在日志分析系統里的簡單應用 問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。