??寫作不易請多多點贊評論支持博主??
1、目的
"定時處理用戶搜索日志,統計用戶搜索詞"
2、期望結果
"當滑鼠下拉點入搜索欄后顯示搜索熱詞統計結果"

使用spring+springmvc+mysql+bootstarp實作的學生就業案例~(教學需要大佬勿噴)
3、環境要求

- anaconda python3.6
- jdk1.8
- spark-2.4.7-bin-hadoop2.7
- scala-2.13.3
- hadoop-2.8.5
安裝教程可參考:http://t.zoukankan.com/yfb918-p-10978856.html
百度網盤安裝包:https://pan.baidu.com/s/1AI1kVeXb_lJ1Z-CWagT5Yg(spark+hadoop+scala)
提取碼:a8uf
4、代碼實作
日志格式:日志+用戶+搜索詞
log.log
2021-05-04_12:11:48 [INFO] 201012109001:百度
2021-05-04_12:12:46 [INFO] 201012109001:阿里
2021-05-04_12:12:47 [INFO] 201012109001:百度
2021-05-04_12:12:48 [INFO] 201012109001:北京
2021-05-04_12:13:49 [INFO] 201012109001:互聯網
2021-05-04_12:13:49 [INFO] 201012109002:互聯網
2021-05-04_12:13:49 [INFO] 201012109002:百度
注意:需要把該內容放在log.log檔案中并與處理程式存放在相同位置下
import findspark
findspark.init()
from pyspark import SparkContext ,SparkConf
import json
"""
定時器
"""
from threading import Timer
import datetime
def sparkTimert():
print('TimeNow:%s' % (datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
res = getData()
saveJson(res)
t = Timer(120, sparkTimert)
t.start()
"""
spark資料處理
"""
def getData():
conf=SparkConf().setAppName("Project1").setMaster("local[4]")
sc = SparkContext(conf=conf)
lines = sc.textFile("log.log")
"""
熱搜實作
"""
# 過濾log為info的資料,按照空格將字串切割存盤在陣列中,取陣列中第三個資料按照分號分割取第二個資料并使用countByValue進行統計個數
data = lines.filter(lambda s: "INFO" in s).map(lambda s: s.split(" ")[2].split(":")[1]).countByValue()
sc.stop()
return {i[0]:i[1] for i in sorted(data.items(), key=lambda d: d[1],reverse=True)[:3]}
"""
保存熱搜json
"""
def saveJson(data):
filename='data.json'
with open(filename,'w') as file_obj:
json.dump(data,file_obj)
# getData()
if __name__ == '__main__':
sparkTimert()
注意:確保各個環境已安裝成功
統計結果
data.json
{"百度": 6, "互聯網": 2, "阿里": 1}
??寫作不易請多多點贊評論支持博主??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298317.html
標籤:其他
