Python大数据之PySpark(七)SparkCore案例

文章目录

    • SparkCore案例
      • PySpark实现SouGou统计分析
    • 总结
    • 后记

SparkCore案例

PySpark实现SouGou统计分析

  • jieba分词:

  • pip install jieba 从哪里下载pypi

  • image-20210911172012214

  • 三种分词模式

  • 精确模式,试图将句子最精确地切开,适合文本分析;默认的方式

  • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;

  • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

  • image-20210911171724531

# -*- coding: utf-8 -*-
# Program function:测试结巴分词
import jieba
import re# jieba.cut
# 方法接受四个输入参数:
# 需要分词的字符串;
# cut_all 参数用来控制是否采用全模式;
# HMM 参数用来控制是否使用 HMM 模型;
# use_paddle 参数用来控制是否使用paddle模式下的分词模式,paddle模式采用延迟加载方式,通过enable_paddle接口安装paddlepaddle-tiny,并且import相关代码;
str = "我来到北京清华大学"
print(list(jieba.cut(str)))  # ['我', '来到', '北京', '清华大学'],默认的是精确模式
print(list(jieba.cut(str, cut_all=True)))  # ['我', '来到', '北京', '清华', '清华大学', '华大', '大学'] 完全模式# 准备的测试数据
str1 = "00:00:00	2982199073774412	[360安全卫士]	8 3	download.it.com.cn/softweb/software/firewall/antivirus/20067/17938.html"
print(re.split("\s+", str1)[2])  # [360安全卫士]
print(re.sub("\[|\]", "", re.split("\s+", str1)[2])) #360安全卫士
print(list(jieba.cut(re.sub("\[|\]", "", re.split("\s+", str1)[2]))))  # [360安全卫士] --->['360', '安全卫士']
  • image-20210911173303174
  • 数据认知:数据集来自于搜狗实验室,日志数据

  • 日志库设计为包括约1个月(2008年6月)Sogou搜索引擎部分网页查询需求用户点击情况的网页查询日志数据集合。

  • image-20210911171106364
  • image-20210911171201739
  • 需求

  • 1-首先需要将数据读取处理,形成结构化字段进行相关的分析

  • 2-如何对搜索词进行分词,使用jieba或hanlp

  • jieba是中文分词最好用的工具

  • image-20210911171442874
  • 步骤

  • 1-读取数据

  • 2-完成需求1:搜狗关键词统计

  • 3-完成需求2:用户搜索点击统计

  • 4-完成需求3:搜索时间段统计

  • 5-停止sparkcontext

  • 代码

# -*- coding: utf-8 -*-# Program function:搜狗分词之后的统计'''* 1-读取数据
* 2-完成需求1:搜狗关键词统计
* 3-完成需求2:用户搜索点击统计
* 4-完成需求3:搜索时间段统计
* 5-停止sparkcontext'''from pyspark import SparkConf, SparkContextimport reimport jiebaif __name__ == '__main__':# 准备环境变量conf = SparkConf().setAppName("sougou").setMaster("local[*]")
sc = SparkContext.getOrCreate(conf=conf)
sc.setLogLevel("WARN")# TODO*1 - 读取数据sougouFileRDD = sc.textFile("/export/data/pyspark_workspace/PySpark-SparkCore_3.1.2/data/sougou/SogouQ.reduced")# print("sougou count is:", sougouFileRDD.count())#sougou count is: 1724264# 00:00:00 2982199073774412   [360安全卫士]  8 3    download.it.com.cn/softweb/software/firewall/antivirus/20067/17938.htmlresultRDD=sougouFileRDD \
.filter(lambda line:(len(line.strip())>0) and (len(re.split("\s+",line.strip()))==6))\
.map(lambda line:(re.split("\s+", line)[0],re.split("\s+", line)[1],re.sub("\[|\]", "", re.split("\s+", line)[2]),re.split("\s+", line)[3],re.split("\s+", line)[4],re.split("\s+", line)[5]
))# print(resultRDD.take(2))#('00:00:00', '2982199073774412', '360安全卫士', '8', '3', 'download.it.com.cn/softweb/software/firewall/antivirus/20067/17938.html')
#('00:00:00', '07594220010824798', '哄抢救灾物资', '1', '1', 'news.21cn.com/social/daqian/2008/05/29/4777194_1.shtml')# TODO*2 - 完成需求1:搜狗关键词统计print("=============完成需求1:搜狗关键词统计==================")
recordRDD = resultRDD.flatMap(lambda record: jieba.cut(record[2]))# print(recordRDD.take(5))sougouResult1=recordRDD\.map(lambda word:(word,1))\.reduceByKey(lambda x,y:x+y)\.sortBy(lambda x:x[1],False)# print(sougouResult1.take(5))# TODO*3 - 完成需求2:用户搜索点击统计print("=============完成需求2:用户搜索点击统计==================")# 根据用户id和搜索的内容作为分组字段进行统计sougouClick = resultRDD.map(lambda record: (record[1], record[2]))
sougouResult2=sougouClick\.map(lambda tuple:(tuple,1))\.reduceByKey(lambda x,y:x+y) #key,value# 打印一下最大的次数和最小的次数和平均次数print("max count is:",sougouResult2.map(lambda x: x[1]).max())
print("min count is:",sougouResult2.map(lambda x: x[1]).min())
print("mean count is:",sougouResult2.map(lambda x: x[1]).mean())# 如果对所有的结果排序# print(sougouResult2.sortBy(lambda x: x[1], False).take(5))# TODO*4 - 完成需求3:搜索时间段统计print("=============完成需求3:搜索时间段-小时-统计==================")
#00:00:00
hourRDD = resultRDD.map(lambda x: str(x[0])[0:2])
sougouResult3=hourRDD\.map(lambda word:(word,1))\.reduceByKey(lambda x,y:x+y)\.sortBy(lambda x:x[1],False)
print("搜索时间段-小时-统计",sougouResult3.take(5))# TODO*5 - 停止sparkcontextsc.stop()

总结

  • 重点关注在如何对数据进行清洗,如何按照需求进行统计
  • 1-rdd的创建的两种方法,必须练习
  • 2-rdd的练习将基础的案例先掌握。map。flatMap。reduceByKey
  • 3-sougou的案例需要联系2-3遍
  • 练习流程:
  • 首先先要将代码跑起来
  • 然后在理解代码,这一段代码做什么用的
  • 在敲代码,需要写注释之后敲代码

AI副业实战手册:http://www.yibencezi.com/notes/253200?affiliate_id=1317(目前40+工具及实战案例,持续更新,实战类小册排名第一,做三个月挣不到钱找我退款,交个朋友的产品)

后记

📢博客主页:https://manor.blog.csdn.net

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 Maynor 原创,首发于 CSDN博客🙉
📢感觉这辈子,最深情绵长的注视,都给了手机⭐
📢专栏持续更新,欢迎订阅:https://blog.csdn.net/xianyu120/category_12453356.html

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

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

相关文章

洗地机怎么选?2023年洗地机推荐

洗地机结合洗地、拖地、扫地的功能,在日常生活中备受关注,他能帮助我们更加节省时间和节省体力,但是面对参差不齐的洗地机市场如何选到适合自己的呢,下文整理了几款非常值得入手的性价比型号,供大家选择参考。 一、CE…

C++Day2

#include <iostream>using namespace std;class Rect { private:int width;int height; public:void init(int w,int h){width w;height h;}void set_w(int w){width w;}void set_h(int h){height h;}void show(){cout << "矩形的周长为&#xff1a;"…

Java数组:没错,不装了我就是书架。

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、数组的概念1、什么是数组&#xff1f;2、数组的创建3、数组的初始化Ⅰ、动态初始化Ⅱ、静态初始化 二、数组的使用1、数组中…

Windows系统上使用CLion远程开发Linux程序

CLion远程开发Linux程序 情景说明Ubuntu配置CLion配置同步 情景说明 在Windows系统上使用CLion开发Linux程序&#xff0c;安装CLion集成化开发环境时会自动安装cmake、mingw&#xff0c;代码提示功能也比较友好。 但是在socket开发时&#xff0c;包含sys/socket.h头文件时&am…

【Java-LangChain:使用 ChatGPT API 搭建系统-4】评估输入-分类

第三章&#xff0c;评估输入-分类 如果您正在构建一个允许用户输入信息的系统&#xff0c;首先要确保人们在负责任地使用系统&#xff0c;以及他们没有试图以某种方式滥用系统&#xff0c;这是非常重要的。 在本章中&#xff0c;我们将介绍几种策略来实现这一目标。 我们将学习…

【yolo系列:YOLOV7改进-添加EIOU,SIOU,AlphaIOU,FocalEIOU.】

yolo系列文章目录 在YoloV7中添加EIoU,SIoU,AlphaIoU,FocalEIoU,Wise-IoU. 2023-2-7 更新 yolov7添加Wise-IoUB站链接 重磅&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; YOLO系列模型改进损失函数 文章目录 yolo系列文章目录一、初始的yolov7损失函数二、首…

7346-2015 控制电机基本外形结构型式

声明 本文是学习GB-T 7346-2015 控制电机基本外形结构型式.pdf而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了控制电机的机座号、外形及安装尺寸、轴伸型式、出线方式、标记及铭牌。 本标准适用于各类控制电机(以下简称电机),其…

NFT Insider#110:The Sandbox与TB Media Global合作,YGG Web3游戏峰会阵容揭晓

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members、BeepCrypto出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周报将从NFT市场数据&#xff0c;艺术新闻类&#xff0c;游戏新闻类&#xff0c;虚拟世界类&#xff0…

数据结构面试常问问题--保研及考研复试

前言&#xff1a; Hello大家好&#xff0c;我是Dream。今年保研上岸山东大学人工智能专业 &#xff08;经验贴&#xff09;&#xff0c;现在将我自己的专业课备考知识点整理出来&#xff0c;分享给大家&#xff0c;希望可以帮助到大家&#xff01;这是重点知识总结&#xff0c;…

为什么短视频离不开美颜SDK?短视频领域的秘密武器

在当今的社交媒体时代&#xff0c;短视频已经成为了人们获取信息、娱乐和社交的重要方式。无论是抖音、快手&#xff0c;还是Instagram、TikTok&#xff0c;短视频都以其独特的魅力吸引着数亿用户。而在这些短视频的背后&#xff0c;有一款名为“美摄美颜SDK”的秘密武器&#…

软件项目验收测试报告-软件项目验收流程

对甲方而言&#xff0c;项目验收是正式接受项目成果&#xff0c;将项目从建设转为运营。对于乙方来说&#xff0c;则意味着项目的结束&#xff0c;项目资源的释放。 项目验收是项目收尾的重要环节&#xff0c;依据招投标文件、合同对测评相关要求内容、项目章程和项目过程中的…

国庆出游远程实测:ToDesk 、TeamViewer、AnyDesk远程控制软件稳定性

ToDesk 、TeamViewer、AnyDesk远程控制软件稳定性 【前言】【实测软件】【测试环境】【实操体验】1. 软件安装2. 登录速度3. 文件传输4. 操作延迟5. 画面清晰度6. 安全防护 【本文小结】 【前言】 随着科技的不断发展&#xff0c;远程控制软件已成为我们生活中不可或缺的一部分…

7344-2015 交流伺服电动机通用技术条件

声明 本文是学习GB-T 7344-2015 交流伺服电动机通用技术条件.pdf而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了交流伺服电动机的分类、技术要求和试验方法、检验规则、交付准备。 本标准适用于两相交流伺服电动机(以下简称电机…

7321-2017 定形耐火制品试样制备方法

声明 本文是学习GB-T 7321-2017 定形耐火制品试样制备方法.pdf而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了定形耐火制品制样的定义、制样部位的确定原则和试样的制备。 本标准适用于定形耐火制品试样的制备。 2 规范性引用文…

宝塔反代openai官方API接口详细教程,502 Bad Gateway问题解决

一、前言 宝塔反代openai官方API接口详细教程&#xff0c;实现国内使用ChatGPT502 Bad Gateway问题解决&#xff0c; 此方法最简单快捷&#xff0c;没有复杂步骤&#xff0c;不容易出错&#xff0c;即最简单&#xff0c;零代码、零部署的方法。 二、实现前提 一台海外VPS服务…

[补题记录] Atcoder Beginner Contest 297(F)

URL&#xff1a;https://atcoder.jp/contests/abc297 目录 F Problem/题意 Thought/思路 Code/代码 F Problem/题意 给一个 H * W 的矩形&#xff0c;在其中任意放置 K 个点&#xff0c;由这 K 个点构成的最小矩形带来的贡献为该矩形的面积&#xff0c;这 K 个点构成一种…

1.6 IntelliJ IDEA开发工具

前言&#xff1a; ### 1.6 IntelliJ IDEA开发工具笔记 - **背景**&#xff1a; - 使用基础文本编辑器如记事本编写Java代码虽然可行&#xff0c;但存在效率低下且难以调试的问题。 - 集成开发环境 (IDE) 可以有效地提高Java程序的开发效率。 - **常见Java IDE**&#xf…

光伏发电预测(GRU模型,Python代码)

运行效果&#xff1a;光伏发电预测&#xff08;GRU模型&#xff0c;Python代码&#xff09;_哔哩哔哩_bilibili 所有库的版本&#xff1a; 1.数据集&#xff08;连续10年不间断采集三个光伏电站的发电量及天气情况&#xff0c;每隔半个小时采集一次信息&#xff0c;因此&…

NICE-SLAM——论文简析

NICE-SLAM: Neural Implicit Scalable Encoding 现有的神经隐式表征方法会产生过度平滑的场景重建&#xff0c;并且难以扩展到大型场景。这些局限性主要是由于其简单的全连接网络架构没有将局部信息纳入观测。NICE-SLAM通过引入分层场景表示法&#xff0c;纳入了多层次的局部信…

【Kotlin精简】第2章 集合

1 简介 在 Kotlin 中集合主要分为可变集合与只读集合&#xff0c;其中可变集合使用 “Mutable” 前缀 集合类名表示&#xff0c;比如 MutableList、MutableSet、MutableMap 等。而对于只读集合就是和 Java 中集合类名是一致。 Java 中的 List 非 Kotlin 中的 List , 因为 Kot…