Python学习从0到1 day26 第三阶段 Spark ⑤ 搜索引擎日志分析

devtools/2024/11/16 2:55:01/

目录

一、搜索引擎日志分析

二、需求1:热门搜索时间段(小时精度)Top3

实现步骤

三、需求2:打印输出:热门搜索词Top3

实现步骤

四、需求3:打印输出:统计hadoop关键字在哪个时段被搜索最多

实现步骤

五、需求4:将数据转换为JSON格式,写出到文件中

实现步骤

注:


我带着这份勇敢继续向前,忽然明白,我应该是自己的那座山

                                                                                        —— 24.11.10

一、搜索引擎日志分析

原数据文件:(打开百度网盘复制链接)

通过百度网盘分享的文件:search_log.txt
链接:

https://pan.baidu.com/s/1liw33MOGTUn6qdgYFk2SOQ?pwd=1234 

提取码:1234

读取文件转换成RDD,并完成:

        ① 打印输出:热门搜索时间段(小时精度)Top3

        ② 打印输出:热门搜索词Top3

        ③ 打印输出:统计hadoop关键字在哪个时段被搜索最多

        ④ 将数据转换为JSON格式,写出为文件


二、需求1:热门搜索时间段(小时精度)Top3

实现步骤

① 取出全部的时间并转换为小时

② 转换为(小时,1)的二元元组

③ Key分组聚合Value

④ 排序(降序)

⑤ 取前3

python">from pyspark import SparkConf, SparkContext
import os
os.environ['PYSPARK_PYTHON'] = "E:/python.learning/pyt/scripts/python.exe"
os.environ['HADOOP_HOME'] = "E:\python.learning\hadoop分布式相关\hadoop-3.0.0"
conf = SparkConf().setMaster("local").setAppName("test_spark")
conf.set("spark.default.parallelize", "1")
sc = SparkContext(conf = conf)#  读取文件转换成rdd对象
file_rdd = sc.textFile("E:\python.learning\第15章资料\资料\search_log.txt")# TODO 需求1:热门搜索时间段(小时精度)Top3
# ①取出全部的时间并转换为小时
# ② 转换为(小时,1)的二元元组
# ③ Key分组聚合Value
# ④ 排序(降序)
# ⑤ 取前3
res1 = file_rdd.map(lambda x:x.split("\t")).\map(lambda x:x[0][:2]).\map(lambda x:(x, 1)).\reduceByKey(lambda a,b : a + b).\sortBy(lambda x:x[1], ascending = False, numPartitions = 1).\take(3)
print(res1)


三、需求2:打印输出:热门搜索词Top3

实现步骤

① 取出全部的搜索词

② (词,1) 二元元组

③ 分组聚合

④ 排序

⑤ 取出Top3

python">from pyspark import SparkConf, SparkContext
import os
os.environ['PYSPARK_PYTHON'] = "E:/python.learning/pyt/scripts/python.exe"
os.environ['HADOOP_HOME'] = "E:\python.learning\hadoop分布式相关\hadoop-3.0.0"
conf = SparkConf().setMaster("local").setAppName("test_spark")
conf.set("spark.default.parallelize", "1")
sc = SparkContext(conf = conf)#  读取文件转换成rdd对象
file_rdd = sc.textFile("E:\python.learning\第15章资料\资料\search_log.txt")# TODO 需求2:打印输出:热门搜索词Top3
# ① 取出全部的搜索词
# ② (词,1) 二元元组
# ③ 分组聚合
# ④ 排序
# ⑤ 取出Top3
file_rdd.map(lambda x : (x.split("\t")[2],1)).\reduceBy(lambda a, b : a + b ).\sortBy(lambda x : x[1], ascending = False, numPartitions = 1).\take(3)


四、需求3:打印输出:统计hadoop关键字在哪个时段被搜索最多

实现步骤

① 过滤内容,只保留hadoop关键词

② 转换为(小时,1)的二元元组

③ Key分组聚合Value

④ 排序(降序)

⑤ 取前1(最多的一个)

python">from pyspark import SparkConf, SparkContext
import os
os.environ['PYSPARK_PYTHON'] = "E:/python.learning/pyt/scripts/python.exe"
os.environ['HADOOP_HOME'] = "E:\python.learning\hadoop分布式相关\hadoop-3.0.0"
conf = SparkConf().setMaster("local").setAppName("test_spark")
conf.set("spark.default.parallelize", "1")
sc = SparkContext(conf = conf)#  读取文件转换成rdd对象
file_rdd = sc.textFile("E:\python.learning\第15章资料\资料\search_log.txt")# TODO 需求3:打印输出:统计hadoop关键字在哪个时段被搜索最多
# ① 过滤内容,只保留hadoop关键词
# ② 转换为(小时,1)的二元元组
# ③ Key分组聚合Value
# ④ 排序(降序)
# ⑤ 取前1(最多的一个)
res3 = file_rdd.map(lambda x : x.split("\t")).\filter(lambda x : x[2] == "hadoop").\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("res3 : ",res3)


五、需求4:将数据转换为JSON格式,写出到文件中

实现步骤

① 转换为JSON格式的RDD

② 写出为文件

注:

① 每一次链接调用时,都可以在上一层的末尾加上" \ "进行换行,再用” . “进行调用

② 将数据转换为JSON格式最好的方式是先转换为字典,再由字典转换为JSON格式

python">from pyspark import SparkConf, SparkContext
import os
os.environ['PYSPARK_PYTHON'] = "E:/python.learning/pyt/scripts/python.exe"
os.environ['HADOOP_HOME'] = "E:\python.learning\hadoop分布式相关\hadoop-3.0.0"
conf = SparkConf().setMaster("local").setAppName("test_spark")
conf.set("spark.default.parallelize", "1")
sc = SparkContext(conf = conf)#  读取文件转换成rdd对象
file_rdd = sc.textFile("E:\python.learning\第15章资料\资料\search_log.txt")# TODO 需求4:将数据转换为JSON格式,写出到文件中
# ① 转换为JSON格式的RDD
# ② 写出为文件
res4 = 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]}).\saveAsTextFile("E:\python.learning\hadoop分布式相关\data\output4")


http://www.ppmy.cn/devtools/134324.html

相关文章

详解基于C#开发Windows API的SendMessage方法的鼠标键盘消息发送

在C#中,SendMessage方法是一个强大的工具,它允许我们与Windows API交互,模拟键盘和鼠标事件。本文将详细介绍如何使用SendMessage方法来发送鼠标和键盘消息。 1. SendMessage方法概述 SendMessage是Windows API中的一个函数,它用…

python环境中,敏感数据的存储与读取问题解决方案

提出原因:因为下面所说的这个模块,我运行时不出任何作用。所以。 有一些类似于 python-dotenv 的模块,可以用来管理环境变量。以下是一些常用的替代模块及其代码示例: ### 1. os.environ Python 标准库中的 os.environ 可以直接…

【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件

MySQL与Oracle一样都是通过逻辑存储结构来管理物理存储结构,即管理硬盘上存储的各种文件。下面将详细介绍InnoDB存储引擎中的数据文件和重做日志文件。 一、数据文件 “.ibd”文件和ibdata文件 这两种文件都是存放Innodb数据的文件,之所以有两种文件来…

C++11新特性(二)

目录 一、C11的{} 1.初始化列表 2.initializer_list 二、可变参数模版 1.语法与原理 2.包扩展 3.empalce接口 三、新的类功能 四、lambda 1.语法 2.捕捉列表 3.原理 五、句装器 1.function 2.bind 一、C11的{} 1.初始化列表 C11以后想统⼀初始化⽅式&#xff0…

node.js学习笔记-快速搭建一个 Express 项目的基本骨架(一)

一、前言 express-generator是 Express 框架提供的一个应用程序生成器工具,它可以帮助你快速搭建一个 Express 项目的基本骨架,节省大量手动创建文件和配置的时间。 以下是关于它的详细介绍和使用步骤: 二、安装 首先,确保你已经…

万字长文解读机器学习——感知机、MLP、SVM

🌺历史文章列表🌺 机器学习——损失函数、代价函数、KL散度机器学习——特征工程、正则化、强化学习机器学习——常见算法汇总机器学习——感知机、MLP、SVM机器学习——KNN机器学习——贝叶斯机器学习——决策树机器学习——随机森林、Bagging、Boostin…

11.11 机器学习-数据集的获取和划分

# sklearn玩具数据集 # 鸢尾花 数据集使用 from sklearn.datasets import load_iris,load_wine,fetch_20newsgroups # 导入 数据集 load本地 feath联网 from sklearn.model_selection import train_test_split # 数据集划分方法 from sklearn.feature_extraction import Di…

公开一下我的「个人学习视频」!

哈喽,大家好,我是六哥。 鉴于上次分享,很多同学说,六哥能整一些百度网盘的资源吗? 可以,来安排,看看有你心动的吗? 性能测试系列 测开系列 python方向 Java方向 主管必会系列 质…