摸鱼大数据——Spark Core——RDD综合案例——搜狗搜索流

2.1 数据源介绍

访问时间 用户id []里面是用户输入搜索内容 url结果排名 用户点击页面排序 用户点击URL

字段与字段之间的分隔符号为 \t和空格 (制表符号)

2.2 需求分析
需求一: 统计每个 关键词 出现了多少次,最终展示top10数据关键词示例: ['.','+','的',360', '安全卫士', '哄抢', '救灾物资', '75810', '部队' ...]注意:'.','+','的'都需要过滤 
​
需求二: 统计每个用户每个 搜索内容 点击的次数,最终展示top5数据
​
需求三: 统计每个分钟页面点击次数,最终展示top5数据(课后作业)

2.3jieba分词器
说明:
发现在数据中,并没有直接的关键词,关键词数据是包含在搜索词中,而且一个搜索词中包含了多个关键词,所有如何想基于关键词进行统计, 首先需求先拆分搜索词,获取关键词,思考:如何做呢?
​
借助第三方的分词工具实现中文分词Java语言:IK分词器Python语言:jieba(结巴)分词器
​
如何使用jieba分词器呢?
1- 需要在系统中安装jieba分词库: local模式只需要安装在node1即可 如果集群模式运行 需要各个节点都要安装安装命令:  pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba

安装成功的截图:

测试

# 导包
import jieba
​
# main程序的入口
if __name__ == '__main__':# 精确模式r1 = list(jieba.cut('我要去黑马找斌哥学习大数据技术'))print(r1)# 全模式r2 = list(jieba.cut('我要去黑马找斌哥学习大数据技术',cut_all=True))print(r2)# 搜索引擎模式r3 = list(jieba.cut_for_search('我要去黑马找斌哥学习大数据技术'))print(r3)

2.4 代码实现
2.3.1 数据准备
  • 1- 将数据文件拷贝到data目录下:

  • 2- 数据清洗_分析

# 导包
import os
​
import jieba
from pyspark import SparkConf, SparkContext
​
# 绑定指定的python解释器
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'
​
​
def get_topN_keyword(etlRDD, n):r1 = etlRDD.flatMap(lambda line_list: list(jieba.cut(line_list[2]))) \.filter(lambda word: word not in ('.', '+', '的')) \.map(lambda word: (word, 1)) \.reduceByKey(lambda agg, curr: agg + curr) \.top(n, lambda t: t[1])print(r1)
​
​
def get_topN_search(etlRDD,n):r2 = etlRDD.map(lambda line_list: ((line_list[1], line_list[2]),1) ) \.reduceByKey(lambda agg, curr: agg + curr) \.top(n, lambda t: t[1])print(r2)
​
​
# 创建main函数
if __name__ == '__main__':# 1.创建SparkContext对象conf = SparkConf().setAppName('pyspark_demo').setMaster('local[*]')sc = SparkContext(conf=conf)
​# 2.数据输入textRDD = sc.textFile('file:///export/data/spark_project/spark_core/data/SogouQ.sample')print(textRDD.count())  # 测试原始数据量10000# 3.数据处理(切分,转换,分组聚合)etlRDD = textRDD.filter(lambda line: line.strip() != '').map(lambda line: line.split()).filter(lambda line_list: len(line_list) >= 6)# 去除搜索内容两端的 [ ]etlRDD = etlRDD.map(lambda line_list:[line_list[0],line_list[1],line_list[2][1:-1],line_list[3],line_list[4],line_list[5]])# 4.数据输出# 需求一: 统计每个 关键词 出现了多少次, 最终展示top10数据 注意:'.', '+', '的'  都需要过滤# 伪SQL:select 关键词 ,count(*)  from  搜狗表 group by 关键词get_topN_keyword(etlRDD, 10)# 需求二: 统计每个用户 每个 搜索内容 点击的次数, 最终展示top5数据# 伪SQL:select 用户,搜索内容,count(*)  from  搜狗表 group by 用户,搜索内容get_topN_search(etlRDD,5)# 5.关闭资源sc.stop()

可能遇到的错误:

原因: reduceByKey只能接收元组中有2个元素的情况

3、数据核对

大数据开发人员/数据分析人员,必须要对自己统计的指标结果负责!!!
​
结果数据的核对方式:
1- (不常用)在离线文件中直接ctrl+F搜索关键内容核对
2- (常用)一般原始数据会存放在MySQL/Hive中一份,可以编写和代码逻辑完全一样的SQL来进行核对。可以通过如下方式来提高核对效率:2.1- 如果是分区表,挑选几个分区进行核对即可2.2- 如果是分桶表, 可以抽样查询几个桶核对2.3- 也可以使用tablesample函数对抽样查询2.4- 可以在SQL的where语句中,添加数据过滤条件,例如:时间范围过滤条件、用户编号过滤条件等,将核对的数据量缩小,提高核对效率
3- (不常用,难度比较大)可以对重点指标的同比、环比进行监控。还可以结合算法的方式对指标统计结果进行检测。
4-  个人经验或者同事互相帮忙查看测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zabbix触发器

目录 触发器基础概念 创建和管理触发器 示例 定义一个触发器 在 Zabbix 中,触发器(Trigger)用于定义在监控数据满足特定条件时触发警报或动作。触发器是实现监控告警和自动响应的核心组件之一。以下是关于 Zabbix 触发器的详细解释和用法…

yaml格式转换成json格式

yaml格式转换成json格式 ①postman生成的结果是yaml格式 ps:postman输出的格式是没有自动换行的,需要将内容换行 ②复制到Python的脚本跑一趟:自动换行并去掉/n; str " "//(postman输出的内容) print(st…

唐僧说:分数限制下,选好专业还是选好学校?

贫僧自东土大唐而来,往西天取经,虽非尘世中人,却也常闻世间烦恼。今见24年高考帷幕已落,万千学子面临新的人生抉择,心中不禁生出几分感慨。学校与专业,犹如修行路上的两座山门,一者关乎环境氛围…

HTTPS保证传输安全的关键点

哈喽,大家好呀,淼淼又来和大家见面啦,在如今高度数字化的世界里,信息的安全传输成为了至关重要的议题。HTTPS(超文本传输安全协议)作为HTTP协议的安全升级版,为网络数据的交换提供了强大的安全保…

LMT加仿真,十一届大唐杯全国总决赛

这次省赛带了太多个省一了,并且很多都进入了国赛总决赛,具体可看下面的图片,只放了一部分。目前只有B组是只有一个商用设备赛也就是LMT,A组和高职组都是仿真实践赛加上商用设备赛。 针对商用设备赛有对应的资料&#xff…

windows server2016搭建AD域服务器

文章目录 一、背景二、搭建AD域服务器步骤三、生成可供java程序使用的keystore文件四、导出某用户的keytab文件五、主机配置hosts文件六、主机确认是否能ping通本人其他相关文章链接 一、背景 亲测可用,之前搜索了很多博客,啥样的都有,就是不介绍报错以…

FastDDS中的环境变量

目录 FASTDDS_DEFAULT_PROFILES_FILESKIP_DEFAULT_XMLFASTDDS_BUILTIN_TRANSPORTSROS_DISCOVERY_SERVERROS_SUPER_CLIENTFASTDDS_STATISTICSFASTDDS_ENVIRONMENT_FILE 我们承担ROS,FastDDS,C,cmake等技术的项目开发和专业指导和培训&#xff…

深度学习算法bert

bert 属于自监督学习的一种(输入x的部分作为label) 1. bert是 transformer 中的 encoder ,不同的bert在encoder层数、注意力头数、隐藏单元数不同 2. 假设我们有一个模型 m ,首先我们为某种任务使用大规模的语料库预训练模型 m …

中国1km高分辨率高质量逐年近地表CO数据集(2013-2022年)

该数据为中国高分辨率高质量逐年CO数据集,该数据集主要的空间范围覆盖整个中国,其中内容包括中国1km高分辨率高质量逐年CO数据集(2013-2022年)。时间分辨率为年,单位为mg/m3,数据以(.nc/.tif)格式进行存储。

人工智能写作对话系统源码 自然语言的处理能力 前后端分离 带完整的安装代码包以及搭建教程

系统概述 随着互联网信息爆炸式增长,用户对于高质量、个性化内容的需求日益增长,而传统的内容生成方式已难以满足这一需求。另一方面,深度学习和自然语言处理技术的突破性进展,为人机交互提供了新的可能。本项目正是在此背景下应…

检索增强生成RAG系列7--RAG提升之高级阶段

系列5中讲到会讲解3个方面RAG的提升,它们可能与RAG的准确率有关系,但是更多的它们是有其它用途。本期来讲解第三部分:高级阶段。之所以说是高级阶段,可能是不好归一,而且实现起来相对于前面来说可能更为复杂。 目录 1…

PyCharm中如何将某个文件设置为默认运行文件

之前在使用JetBrain公司的另一款软件IDEA的时候,如果在选中static main函数后按键altenter可以默认以后运行Main类的main函数。最近在使用PyCharm学习Python,既然同为一家公司的产品而且二者的风格如此之像,所以我怀疑PyCharm中肯定也有类似的…

fastadmin 如何给页面添加水印

偶然发现fastadmin框架有个水印插件&#xff0c;看起来漂亮&#xff0c;就想也实现这样的功能&#xff0c;看到需要费用。但是现成的插件需要费用&#xff0c;自己动手丰衣足食。说干就干。 1. 找到watermark.js &#xff0c;放到assets/js/ 下面 2.具体页面引入 <script…

【总线】AXI4第八课时:介绍AXI的 “原子访问“ :独占访问(Exclusive Access)和锁定访问(Locked Access)

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣&#xff0c;那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者&#xff0c;AXI4以其高性能和高度可扩展性&#xff0c;成为了现代电子系统中不可或缺的通信桥梁…

ssm高校宿舍用电管理系统-计算机毕业设计源码97859

摘要 随着高校规模的扩大和学生数量的增加&#xff0c;高校宿舍的用电需求也日益庞大。为了提高用电效率、节约能源、确保用电安全和方便管理&#xff0c;开发一个高校宿舍用电管理系统具有重要意义。本系统将采用Java作为后端开发语言&#xff0c;具备跨平台特性&#xff0c;能…

【高级篇】第10章 Elasticsearch 集群管理与扩展

在本章中,我们将深入探讨Elasticsearch集群的管理与扩展策略,旨在帮助读者构建一个既能应对大规模数据处理需求,又能保持高可用性和弹性的系统架构。我们将从集群架构设计入手,解析不同节点的角色与配置,然后转向节点发现与配置同步机制,最后讨论水平扩展与容错策略,确保…

windows中使用nssm设置nginx开机自启动

1、下载nssm工具 https://nssm.cc/release/nssm-2.24.zip 2、解压并根据自己电脑的位数定位到64或32 3、执行nssm.exe install 4、执行命令启动服务并设置开机自启动 #启动服务 net start nginxService #开机自启动 sc config nginx-service startauto

类和对象-C++运算符重载-加号运算符重载

加号运算符重载 1、成员函数重载号 #include<iostream>using namespace std;class Person { public://1、成员函数重载号Person operator(Person &p){Person temp;temp.m_Athis->m_Ap.m_A;temp.m_Bthis->m_Bp.m_B;return temp; }int m_A;int m_B; }; void t…

【C语言】通过fgets和fscanf了解读写文件流的概念

在C语言中&#xff0c;fgets和fscanf都是用于从文件或输入流中读取数据的函数&#xff0c;但它们的工作方式和用途有所不同。 1.fgets&#xff08;Get File String&#xff09; 示例代码&#xff1a; char buffer[100]; fgets(buffer, sizeof(buffer), stdin); fgets 函数用于…

定位线上同步锁仍然重复扣费的Bug定位及Redis分布式锁解决方案

在实际生产环境中&#xff0c;处理订单的并发请求时&#xff0c;我们经常会遇到重复扣费的问题。本文将通过一个具体的代码示例&#xff0c;分析在使用同步锁时仍然导致重复扣费的原因&#xff0c;并提供一个基于Redis分布式锁的解决方案。 背景&#xff1a;这个案例出现在商家…