PySpark简单使用(七)——综合案例2

案例介绍

有如下的搜索日志 search_log.txt

00:00:00	2982199073774412	传智播客	8	3	http://www.itcast.cn
00:00:00	07594220010824798	黑马程序员	1	1	http://www.itcast.cn
00:00:00	5228056822071097	传智播客	14	5	http://www.itcast.cn
00:00:00	6140463203615646	博学谷	62	36	http://www.itcast.cn
00:00:00	8561366108033201	IDEA	3	2	http://www.itcast.cn
00:00:00	23908140386148713	传智专修学院	1	2	http://www.itcast.cn
23:00:00	1797943298449139	flume	8	5	http://www.itcast.cn
23:00:00	00717725924582846	itcast	1	2	http://www.itcast.cn
23:00:00	41416219018952116	bigdata	2	6	http://www.itcast.cn
23:00:00	9975666857142764	IDEA	2	2	http://www.itcast.cn
23:00:00	21603374619077448	酷丁鱼	1	6	http://www.itcast.cn
23:00:00	7423866288265172	bigdata	3	13	http://www.itcast.cn
23:00:00	0616877776407358	itcast	2	9	http://www.itcast.cn
23:00:00	3933365481995287	flume	6	3	http://www.itcast.cn
23:00:00	8242389147671512	数据仓库	2	3	http://www.itcast.cn
23:00:00	8248403977107859	传智汇	1	1	http://www.itcast.cn
23:00:00	6239728533154822	itheima	7	9	http://www.itcast.cn
23:00:00	6551182914925117	itcast	6	4	http://www.itcast.cn
23:00:00	2345161545038265	传智汇	2	1	http://www.itcast.cn
23:00:00	06478452674857782	hadoop	4	1	http://www.itcast.cn
23:00:00	23405445793591878	博学谷	4	5	http://www.itcast.cn
23:00:00	23457845712802688	hadoop	4	1	http://www.itcast.cn
23:00:00	4625224675315291	spark	2	6	http://www.itcast.cn
....

需求

  1. 热门搜索时间段TOP3
  2. 热门搜索词TOP3
  3. 统计 “黑马程序员” 在什么时间段被搜索最多
  4. 将数据转为JSON格式

实现代码

from pyspark import SparkConf, SparkContext
import json
import os
# 1.让PySpark知道Python的解释器位置
os.environ['PYSPARK_PYTHON'] = "C:/Python310/python.exe"
conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
sc = SparkContext(conf=conf)

file_rdd = sc.textFile("./search_log.txt")
# 需求1:热门搜索时间段TOP3
# 1.1 取出全部的时间转为小时
# 1.2 转为(小时, 1)的二元元组
# 1.3 key分组聚合 reduceByKey
# 1.4 排序
# 1.5 取前三
result1 = file_rdd.map(lambda x: (x.split("\t")[0][:2], 1)).\
    reduceByKey(lambda a, b: a + b).\
    sortBy(lambda x: x[1], ascending=False, numPartitions=1).\
    take(3)
print("热门搜索时间段TOP3:", result1)

# 需求2:热门搜索词Top3
# 2.1 取出全部搜索词
# 2.2 组成(搜索词, 1) 的二元元组
# 2.3 分组聚合 reduceByKey
# 2.4 排序
# 2.5 求Top3
result2 = file_rdd.map(lambda x:(x.split("\t")[2], 1)).\
    reduceByKey(lambda a, b: a + b).\
    sortBy(lambda x: x[1], ascending=False, numPartitions=1).\
    take(3)
print("热门搜索词Top3:", result2)

# 需求3: 统计 "黑马程序员" 在什么时间段被搜索最多
# 3.1 过滤内容,只保留关键词为黑马程序员的list
# 3.2 转换为(小时, 1)的二元元组
# 3.3 分组聚合 reduceByKey
# 3.4 排序
# 3.5 最大
result3 = file_rdd.map(lambda x:x.split("\t")).\
    filter(lambda x :x[2] == '黑马程序员').\
    map(lambda x:(x[0][:2], 1)).\
    reduceByKey(lambda a, b: a + b).\
    sortBy(lambda x: x[1], ascending=False, numPartitions=1).\
    take(1)

print("'黑马程序员'被搜索最多的时段:",result3)

# 需求4: 将数据转为JSON格式
rdd_json = file_rdd.map(lambda x: x.split("\t")).\
    map(lambda x: {"time": x[0], "user_id": x[1], "key_word": x[2], "rank1": x[3], "rank2": x[4], "url": x[5]})

输出结果:

热门搜索时间段TOP3: [(‘20’, 3479), (‘23’, 3087), (‘21’, 2989)]

热门搜索词Top3: [(‘scala’, 2310), (‘hadoop’, 2268), (‘博学谷’, 2002)]

'黑马程序员’被搜索最多的时段: [(‘22’, 245)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值