spark案例分析-搜索引擎日志分析案例

news2025/1/11 7:08:31

1.业务分析

2.数据截图

3.代码实现:

        main.py:

#cording:utf8
from pyspark import SparkConf, SparkContext
from pyspark.storagelevel import StorageLevel
from defs import content_jieba, filter_word, append_word, extract_user_and_word
from operator import add
if __name__ == '__main__':
    conf = SparkConf().setAppName('test')
    sc = SparkContext(conf=conf)

    # 读取数据
    file_rdd = sc.textFile('hdfs://pyspark01:8020/input/SogouQ.txt')
    # 对数据进行划分
    split_rdd = file_rdd.map(lambda x: x.split('\t'))
    # 因为要做多个需求,split_RDD 作为基础的RDD会被多次使用
    split_rdd.persist(StorageLevel.DISK_ONLY)

    # TODO: 需求1:用户搜素的关键‘词’分析
    # 主要分析热点词
    # 将所有的搜索内容取出
    # print(split_rdd.takeSample(True, 3))
    context_rdd = split_rdd.map(lambda x: x[2])

    # 对搜索的内容进行分词分析
    word_rdd = context_rdd.flatMap(content_jieba)
    # print(word_rdd.collect())

    # 对数据进行过滤,补全
    # 博学 谷 -> 博学谷
    # 传智播 客 -> 传智播客
    # 院校 帮 -> 院校帮
    filtered_rdd = word_rdd.filter(filter_word)
    # 数据补全
    append_rdd = filtered_rdd.map(append_word)

    # 对单词进行分组 聚合 排序 求出前五名
    result_1 = append_rdd.reduceByKey(lambda a, b: a + b).\
        sortBy(lambda x: x[1], ascending=False, numPartitions=1).take(5)
    print('需求1结果:', result_1)

    # TODO:需求2:用户和关键词组合分析
    # 1,我喜欢传智播客
    # 1+我 1+喜欢 1+传智播客
    user_content_rdd = split_rdd.map(lambda x: (x[1],x[2]))
    # 对用户的搜索内容进行分词,分词和用户的ID再次组合
    user_word_rdd = user_content_rdd.flatMap(extract_user_and_word)
    # 对单词进行分组 聚合 排序 求出前五名
    result_2 = user_word_rdd.reduceByKey(lambda a, b: a + b).\
        sortBy(lambda x: x[1], ascending=False, numPartitions=1).take(5)
    print("需求2的结果:", result_2)

    # TODO:需求3:热门搜索时间段分析
    # 取出来所有时间
    time_rdd = split_rdd.map(lambda x: x[0])
    # 对事件进行处理,只保留小时精度即可
    hour_with_one_rdd = time_rdd.map(lambda x: (x.split(":")[0],1))
    # 分组 聚合 排序
    result_3 = hour_with_one_rdd.reduceByKey(add).\
        sortBy(lambda x: x[1],ascending=False,numPartitions=1).collect()
    print("需求3的结果:", result_3)

        defs.py:

import jieba
def content_jieba(data):
    '''使用jieba分词库 对数据分词处理'''
    seg = jieba.cut_for_search(data)
    l = list()
    for word in seg:
        l.append(word)
    return l

def filter_word(data):
    return data not in ['谷', "帮", '客']

def append_word(data):
    if data == '院校' : data = '院校帮'
    if data == '博学' : data = '博学谷'
    if data == '传智播' : data = '传智播客'
    return (data, 1)

def extract_user_and_word(data):
    '''传入数据 例(1,我喜欢传智播客)'''
    user_id = data[0]
    content = data[1]
    # 对content进行访问
    words = content_jieba(content)
    return_list = list()
    for word in words:
        # 过滤 谷、帮、客
        if filter_word(word):
            return_list.append((user_id + '_' + append_word(word)[0],1))
    return return_list

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

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

相关文章

数据结构和算法——图结构

图是一种数据结构; 图 有向图 带权图 邻接矩阵 邻接表相较于邻接矩阵,减少了存储空间; 邻接表 图的深度优先遍历(DFS) 图的广度优先遍历(BFS) 代码: import java.util.ArrayList; import java.util.Arrays; import java.util.L…

【定向征文活动】2023年深圳1024开发者城市聚会活动参会感想征文

深圳1024开发者城市聚会,有奖征文,欢迎大家来参与。 活动介绍 就在2023年10月22日,深圳COC社区与CSDN主办方联合发起了本年度深圳1024开发者城市聚会活动。活动一经发出,收到了小伙伴的热烈反响,一时间报名人数蹭蹭地…

墨西哥专线海运的集装箱尺寸选择

在国际贸易中,海运是一种常见的运输方式,而集装箱作为一种标准化的物流载具,其大小直接影响着货物的装卸和堆垛效率。对于需要通过墨西哥专线海运的客户来说,了解不同尺寸集装箱的优势和适用范围,可以帮助他们更有效地…

Java后端开发——房贷计算器(Ajax版、Json版、等额本息+等额本金)

MVC房贷计算器(Ajax版) 1.新建一个JavaWeb项目hslcalweb,设置tomcat10。 2.创建房贷计算器JavaBean:HslCalBean.java,增加以下的属性,并生成Getter/Setter方法。 private double total; //贷款额度pr…

Linux安装JumpServer

功能简介在线安装 环境要求:准备一台 2核4G (最低)且可以访问互联网的 64 位 Linux 主机 以 root 用户执行如下命令一键安装 JumpServer curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_st…

JAVA毕业设计102—基于Java+Springboot+vue的个人理财管理系统(源码+数据库)

基于JavaSpringbootvue的个人理财管理系统(源码数据库) 一、系统介绍 本系统前后端分离 管理员功能: 登录、注册、添加账单、导出账单、统计分析、个人信息修改、消费对比 二、所用技术 后端技术栈: SpringbootSpringMvcmybatismysql 前端技术栈…

优维低代码实践:父子模型

导语:优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学…

图片怎么做成动态gif?一招简单又高效

如何将静态图片变成gif动态图片?当下,各种各样的gif表情包充斥着我们的日常生活,但是有些gif动图不符合自己的需求,想要自己制作的时候应该怎么办呢?这时候,可以使用gif图片制作(https://www.gi…

session和cookie机制

2023.10.23 域对象 先总结一下到目前位置我所了解的域对象: request(对应的类名:HttpServletRequest) 请求域(请求级别的) session(对应的类名:HttpSession) 会话域&am…

ITSource 分享 第1期【在线考试系统】

项目介绍 本期给大家介绍一个问卷调查系统. 一起来看看吧 ! 一 业务介绍 该系统分为以下几个模块: 1.我的问卷 image.png 可以查看创建的所有问卷, 包括 收集中,编辑中,已关闭等状态 2.创建问卷 image.png 问题类型可以选择有多种选择: 3.发布并填写问卷 问卷编辑完成后,即可保…

国内外CDN的发展

当今互联网世界中,内容交付网络(Content Delivery Network,CDN)已经成为网络加速的不可或缺的工具。CDN技术在国内外得到广泛应用,为了更好地了解CDN的不同之处以及未来的发展趋势,让我们深入探讨这一领域的…

Spring底层原理(三)

Spring底层原理(三) Bean的生命周期 SpringBootApplication public class Application {public static void main(String[] args) {ConfigurableApplicationContext context SpringApplication.run(Application.class, args);context.close();} } ​ Slf4j Component public…

MySQL身份验证绕过漏洞

搭建 vmihub靶场:vulhub靶场搭建与使用_剁椒鱼头没剁椒的博客-CSDN博客 运行漏洞: # 这里要改成自己的 /vulhub-master 存放目录 cd /etc/docker/vulhub-master/mysql/CVE-2012-2122# 关闭防火墙,不然就要放行3306端口 systemctl stop firewalld# 重启 Docker 服务 servic…

C# | Linq基本功 —— 必学的必熟的10个方法

C# Linq基本功 —— 必学的必熟的10个方法 文章目录 C# Linq基本功 —— 必学的必熟的10个方法1. Linq简介1.1 什么是Linq1.2 Linq的优势 2. Linq基本方法2.1 Where方法2.2 Select方法2.3 OrderBy方法2.4 GroupBy方法2.5 Join方法2.6 Any方法2.7 All方法2.8 First方法2.9 Skip方…

1024勋章

🌸关于重阳节的一些发疯日常(昨天的聊天记录,今天发系列)😅 🌸没错,发出来单纯觉得好玩儿😉(为了1024勋章😏)芜湖!

Kepware带你玩转IEC60870-104驱动

随着越来越多电力设备自动化程度的不断提高以及OPC协议的广泛应用,越多客户倾向于使用更为方便、快捷的方式去获取数据,IEC60870-5-104协议作为一个标准的电子自动化协议,在电力自动化现场应用非常广泛。 本文介绍KEPServerEX的IEC-104驱动&…

WeakMap 弱引用 不会被GC所考量

WeakMap是一种特殊的Map数据结构,只能以引用作为key,并且不会阻止其被垃圾回收。WeakMap的使用如下: 1. 创建WeakMap对象: const weakMap new WeakMap();2. 添加键值对:使用set()方法向WeakMap中添加键值对。注意这里…

c++ 模版的一些注意问题

声明和定义不可分离 举个例子&#xff1a; 定义一个Stack.h: 这里放声明 #include<iostream>using namespace std;template<class T> T Add(const T& left, const T& right);定义一个Stack.cpp, 这里面放定义: template<class T> T Add(const T&a…

虚拟机VMware Workstation Pro安装配置使用服务器系统ubuntu-22.04.3-live-server-amd64.iso

虚拟机里安装ubuntu-23.04-beta-desktop-amd64开启SSH(换源和备份)配置中文以及中文输入法等 ​一、获取Ubuntu服务器版 获取Ubuntu服务器版 二、配置虚拟机 选择Custom(advanced)&#xff1a; 选择Workstation 17.x: 选择“I will install the operating system later.”…

HashMap源码解析_jdk1.8(二)

HashMap源码解析_jdk1.8&#xff08;二&#xff09;构造函数put方法resize扩容方法 HashMap源码解析_jdk1.8&#xff08;二&#xff09; 构造函数 HashMap提供了如下几个构造函数&#xff1a; /*** 构造一个具有指定初始容量和负载因子的空HashMap.** param initialCapacit…