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;以消…

【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…

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

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…

云手机的优缺点分析

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

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

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

Dubbo配置上的一些概念

对于dubbo在spring中我们可能看到有如下配置&#xff08;可参考Schema 配置参考手册 | Apache Dubbo&#xff09;&#xff1a; dubbo:application:id: dubbo-account-examplename: dubbo-account-example# 是否启用 Dubbo 的 QoS&#xff08;Quality of Service&#xff09;服…

Blender雕刻建模_笔刷

1.雕刻模式 雕刻Scuplt&#xff0c;一种常用的建模方式 -选中物体&#xff0c;进入雕刻模式 -重构网格&#xff08;修改体素大小&#xff0c;点击重构网格&#xff09;给物体添加更多面 -选择笔刷&#xff0c;雕刻 -退出雕刻模式 2.重构网格 一种按体积的细分方式&#xf…

openstack部署nova中出现的问题:

[rootcontroller nova]# su -s /bin/sh -c “nova-manage db sync” nova /usr/lib/python2.7/site-packages/pymysql/cursors.py:170: Warning: (1831, u’Duplicate index block_device_mapping_instance_uuid_virtual_name_device_name_idx. This is deprecated and will be…

Springboot+MybatisPlus如何实现带验证码的登录功能

实现带验证码的登录功能由两部分组成&#xff1a;&#xff1a;1、验证码的获取 2、登录&#xff08;进行用户名、密码和验证码的判断&#xff09; 获取验证码 获取验证码需要使用HuTool中的CaptchaUtil.createLineCaptcha()来定义验证码的长度、宽度、验证码位数以及干扰线…

这个notebook集合,赞

这几天在Github上看到一个数据科学仓库&#xff0c;汇总了很多Python notebook代码&#xff0c;主要是数据方向。 项目地址&#xff1a; https://github.com/donnemartin/data-science-ipython-notebooks 其中包括了pandas、numpy、matplotlib、scikit-learn、tensorflow、sp…

c++ visualstudio2017 opencv debug源码 windows配置

源码下载和cmake opencv源码和opencv-contribue文件夹的层级目录 在opencv-4.4.0中新建build文件夹&#xff0c;并启动cmake-gui 配置如下&#xff0c;使用vs2017 x64, 需要注意contrib文件夹的设置&#xff0c;如下方蓝色所示&#xff0c;依次点击Configure和Generate 在bu…

半小时搞懂STM32知识点——UART

1.UART 1.1为什么要使用UART这种协议?介绍一下UART及其特点 成本低&#xff0c;硬件简单&#xff0c;数据格式灵活&#xff1b; 低速全双工异步串行通信 1.2 UART数据帧格式&#xff1f; 起始位&#xff08;1&#xff09;&#xff0b;数据位&#xff08;5-8&#xff09; 校验位…