Spark RDD案例:统计网站每月访问量

这个项目利用Spark技术,通过统计网站访问记录中的日期信息,实现了对每月访问量的统计和排序。通过分析数据,我们可以了解到不同月份的网站访问情况,为进一步优化网站内容和推广策略提供数据支持。
在这里插入图片描述

在这里插入图片描述

使用Spark统计网站每月访问量

1. 准备数据文件
  1. 数据文件:准备包含网站访问记录的CSV文件 websiteData.csv,内容格式如下:

    3798675,1628,89957,81E8E153E24DF28E1D38F01FF4A4AA26,2020-5-13 9:06,http://www.tipdm.org/bdrace/tzjingsai/20200113/1628.html?cName=ral_105
    
  2. 上传数据到云主机

    • 将数据文件上传到master节点的/datafiles目录。
  3. 上传文件到HDFS

    • 创建HDFS目录
      hdfs dfs -mkdir -p /websitetraffic/input
      
    • 上传文件到HDFS
      hdfs dfs -put websiteData.csv /websitetraffic/input
      
2. 使用Spark Shell完成任务
  1. 读取文本文件生成RDD

    var lines = sc.textFile("hdfs://master:9000/websitetraffic/input")
    
  2. 获取日期时间数据

    val datetime = lines.map(line => line.split(",")(4))
    datetime.collect
    
  3. 获取日期数据

    val date = datetime.map(datetime => datetime.split(" ")(0))
    date.collect
    
  4. 获取年月日字段

    val fields = date.map(date => date.split("-"))
    fields.collect
    
  5. 获取(年月, 1)键值对

    val wtmap = fields.map(fields => (fields(0) + "-" + fields(1), 1))
    wtmap.collect
    
  6. 按键归约获取每月访问量

    val wt = wtmap.reduceByKey(_ + _)
    wt.collect
    
  7. 按访问量降序排列

    val wt_desc = wt.sortBy(_._2, false)
    wt_desc.collect
    wt_desc.collect.foreach(println)
    
3. 使用Spark项目完成任务
  1. 创建Maven项目

    • 创建Jakarta EE项目,设置项目名称为SparkRDDWebsiteTraffic,选择Java EE 8,不添加依赖。
    • 修改源程序目录为scala
  2. 添加项目相关依赖

    • pom.xml文件中添加Spark依赖,并告知源程序目录已更名为scala
      <dependencies><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.1.3</version></dependency>
      </dependencies>
      <build><sourceDirectory>src/main/scala</sourceDirectory>
      </build>
      
  3. 添加Scala SDK

    • 在项目结构中选择【Global Libraries】,添加Scala SDK
  4. 创建日志属性文件

    • resources目录下创建log4j.properties文件
      log4j.rootLogger=ERROR, stdout, logfile
      log4j.appender.stdout=org.apache.log4j.ConsoleAppender
      log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
      log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
      log4j.appender.logfile=org.apache.log4j.FileAppender
      log4j.appender.logfile.File=target/traffic.log
      log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
      log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
      
  5. 创建HDFS配置文件

    • resources目录里创建hdfs-site.xml文件
      <configuration><property><name>dfs.client.use.datanode.hostname</name><value>true</value></property>
      </configuration>
      
  6. 创建网站访问量对象

    • 创建包net.huawei.rdd
    • 在包内创建对象WebsiteTraffic
      package net.huawei.rddimport org.apache.spark.{SparkConf, SparkContext}object WebsiteTraffic {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("SparkRDDWebsiteTraffic").setMaster("local[*]")val sc = new SparkContext(conf)val inputPath = "hdfs://master:9000/websitetraffic/input"val outputPath = "hdfs://master:9000/websitetraffic/output"val wt = sc.textFile(inputPath).map(line => line.split(",")(4)).map(datetime => datetime.split(" ")(0)).map(date => date.split("-")).map(fields => (fields(0) + "-" + fields(1), 1)).reduceByKey(_ + _).sortBy(_._2, false)wt.collect.foreach(println)wt.saveAsTextFile(outputPath)sc.stop()}
      }
      
  7. 运行程序,查看结果

    • 在控制台查看运行结果
    • 查看HDFS上的结果文件

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

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

相关文章

Apache2.4和PHP8的量子纠缠

Apache不建议你用&#xff0c;PHP建议使用

一种基于电场连续性的高压MOSFET紧凑模型,用于精确表征电容特性

来源&#xff1a;A Compact Model of High-Voltage MOSFET Based on Electric Field Continuity for Accurate Characterization of Capacitance&#xff08;TED 24年&#xff09; 摘要 本文提出了一种新的高压MOSFET&#xff08;HV MOS&#xff09;紧凑模型&#xff0c;以消…

P5732 杨辉三角

题目描述 给出 &#x1d45b;(&#x1d45b;≤20)n(n≤20)&#xff0c;输出杨辉三角的前 &#x1d45b;n 行。 如果你不知道什么是杨辉三角&#xff0c;可以观察样例找找规律。 输入格式 无 输出格式 无 输入输出样例 输入 #1复制 6 输出 #1复制 1 1 1 1 2 1 1 3 3 …

408学习笔记-数据结构-2-线性表

线性表 1、逻辑结构 1、数据结构只有一种逻辑结构&#xff0c;而可以有两种存储结构&#xff0c;有多种抽象运算。 2、线性表是一种逻辑结构&#xff0c;属于总线性结构——线性结构的一种&#xff0c;同属于线性结构的逻辑结构还有&#xff1a;栈、队列和数组。 3、线性表定…

【经典文献】水下光学和声学成像:融合的时代?最新技术概述

文献名称&#xff1a;《Underwater Optical and Acoustic Imaging: A Time for Fusion? A Brief Overview of the State-of-the-Art》作者列表&#xff1a;Fausto Ferreira, Diogo Machado, Gabriele Ferri, Samantha Dugelay and John Potter作者单位&#xff1a;北约科学技术…

【hana】hana1.0多容器常用命令

基础命令 数据库 连接数据库 hdbsql -u system -p {passwd} -i 02 -d {dbname}查询所有数据库 SELECT DATABASE_NAME, ACTIVE_STATUS FROM M_DATABASES;停止数据库&#xff0c;会修改数据库状态为No ALTER SYSTEM STOP DATABASE testdb; 启动数据库&#xff0c;会修改数据…

多线程的代码案例

目录 单例模式 饿汉模式 懒汉模式 阻塞队列 生产者消费者模型意义: 阻塞队列使用方法 实现阻塞队列 阻塞队列实现生产者消费者模型 定时器 实现简单的定时器 工厂模式 线程池 为啥呢? 从池子里面取 比 创建线程 效率更高 线程池的创建 怎么填坑 ThreadPoolExec…

多年后,再探算法和数据结构

多年来&#xff0c;通过深入学习和实践各种编程语言&#xff0c;我对数据结构和算法在程序设计中的中心地位有了新的认识。本次从汇编语言到高级编程语言的探讨&#xff0c;展示了无论技术如何进步&#xff0c;构成程序的核心—算法和数据结构—始终保持其基础和不变的角色。 …

图解堆排序【一眼看穿逻辑思路】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 目录 1、堆的概念2、实现堆排序前的准备工作3、堆排序的思路3.1 第一步3.2 第二步 4、结语 1、…

音视频捕捉技术:LCC382 SDI采集卡深度解析

在日新月异的多媒体时代&#xff0c;高质量的音视频采集已成为众多领域不可或缺的一环。为此&#xff0c;灵卡科技精心打造了LCC382 —— 一款集高效性、灵活性与前沿技术于一身的SDI输入与环出、HDMI输出音视频采集卡&#xff0c;旨在满足从专业直播、视频会议到医疗影像、安防…

网页版Figma汉化

最近学习Figma&#xff0c;简单介绍一下网页版Figma的汉化方法 1.打开网址&#xff1a;Figma软件汉化-Figma中文版下载-Figma中文社区 2.下载汉化插件离线包 解压汉化包 3.点开谷歌的管理扩展程序 4.点击加载已解压的扩展程序&#xff0c;选择刚刚解压的包 这样就安装好了汉化…

QT状态机2-含终止状态的嵌套状态机

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)

前馈神经网络FNN、多层感知机MLP和反向传播推导

目录 一、前馈神经网络FNN 激活函数的使用 二、多层感知机MLP MLP的典型结构 多层感知机MLP的特点 和前馈神经网络FNN的区别 三、传播推导 1、前向传播(Forward propagation) &#xff08;1&#xff09;输入层到隐藏层 &#xff08;2&#xff09;隐藏层到输出层 2、…

Java面试八股之WeakHashMap的工作原理

简述WeakHashMap的工作原理 弱键&#xff08;Weak Keys&#xff09;&#xff1a; WeakHashMap 的键&#xff08;keys&#xff09;是通过 WeakReference 弱引用进行封装的。弱引用是一种特殊的引用类型&#xff0c;它不会阻止所引用的对象被垃圾收集器回收。这意味着&#xff…

冥想训练具体方法有哪些|流静冥想

冥想是一种身体的放松和敏锐的警觉性相结合的状态。 每日练习的好处远不止你花在集中注意力的那几分钟。桑托雷利是建在乌斯特的马萨诸塞大学医学院的减压诊所的所长&#xff0c;她也是《自愈》的作者&#xff0c;她说&#xff1a;"冥想是一种工具&#xff0c;通过练习&a…

ubuntu无法远程连接,ssh不可用,ssh远程连接被拒绝的解决方法。启动sshd远程连接

1、用以下命令检查ssh状态 systemctl status sshd2、如果查不到sshd状态&#xff0c;或提示没有ssh&#xff0c;就安装ssh服务器和客户机 $ sudo apt install openssh-server # 安装ssh服务器 $ sudo apt install openssh-client # 安装ssh客户机3、如果不能安装openssh-…

构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(一)

LlaMA 3 系列博客 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (四) 基于 LlaMA…

云手机的优缺点分析

云手机&#xff0c;作为云计算领域的创新&#xff0c;致力于提供更为灵活的移动设备体验&#xff0c;特别适用于那些希望在不同设备之间无缝切换的用户。虽然云手机带来了一系列优势&#xff0c;但也伴随着一些挑战&#xff0c;比如网络延迟可能会影响用户体验&#xff0c;特别…

网络安全|隐藏IP地址的5种不同方法

隐藏计算机的IP地址在互联网在线活动种可以保护个人隐私&#xff0c;这是在线活动的一种常见做法&#xff0c;包括隐私问题、安全性和访问限制内容等场景。那么如何做到呢?有很5种方法分享。每种方法都有自己的优点和缺点。 1. 虚拟网络 当您连接到虚拟服务器时&#xff0c;您…

openGauss学习笔记-284 openGauss AI特性-AI4DB数据库自治运维-DBMind模式说明-component子命令

文章目录 openGauss学习笔记-284 openGauss AI特性-AI4DB数据库自治运维-DBMind模式说明-component子命令284.1 命令参考openGauss学习笔记-284 openGauss AI特性-AI4DB数据库自治运维-DBMind模式说明-component子命令 该子命令可以用于启动DBMind的组件,包括可用于监控指标的…