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

embedded/2024/10/21 5:46:04/

这个项目利用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.ppmy.cn/embedded/41943.html

相关文章

Vue学习之:在 vue2 中引入 pdf.js 并配置使其能工作

安装 不同版本的 pdfjs 在 node_modules 中的目录不太一样&#xff0c;如果你想让他正常运行就按照我下面的来确保你的 nvm 版本是 18.17 如果不是的话&#xff0c;建议你配置跟我调成一样的&#xff0c;否则很容易出问题 nvm install 18.17.0 nvm use 18.17.0安装 pdfjs&…

JavaScript如何使用Cookie存值

在JavaScript中&#xff0c;可以使用document.cookie来设置、读取或删除Cookie。以下是一个如何使用document.cookie来存储一个值的简单示例&#xff1a; 设置Cookie&#xff1a; // 假设我们有一个值要存储 let valueToStore Hello, World!; // 设置Cookie的名称、值和过…

线性系统(二)

线性系统&#xff08;二&#xff09; 1.直观理解线性方程组结构2. 不同解的结论3. 更一般的高斯-约旦消元法4.齐次线性方程组 链接: 线性系统&#xff08;一&#xff09; 1.直观理解线性方程组结构 长这样&#xff0c;方程就有解&#xff0c;即相交坐标。 长这样&#xff0c;…

gitlab webhook触发jenkins任务

配置jenkins 安装gitlab插件 配置jenkins job 选择gitlab webhook触发 在高级中生成token 代码仓设置 新增webhook 配置webhook 测试连接 缺点&#xff0c;不能带gitLab事件的参数&#xff01;&#xff01;&#xff01;

el-table组件选中后使用toggleRowSelection无法取消已选中的数据——bug记录-骚操作解决

先说本文重点解决的问题&#xff1a; 存在的问题&#xff1a;当右侧已选中的数据中&#xff0c;删除了左侧其他页面的数据&#xff0c;但是左侧数据切换到其他页面后&#xff0c;左侧还保留选中的状态。 最近在写后台管理系统的时候&#xff0c;遇到一个需求&#xff1a; 左…

项目-坦克大战

增加功能 我方坦克在发射的子弹消亡后&#xff0c;才能发射新的子弹。同时实现发多颗子弹 1&#xff0c;在按下J键&#xff0c;我们判断当前hero对象的子弹&#xff0c;是否已经销毁2&#xff0c;如果没有销毁&#xff0c;就不去触发shotEnemyTank3&#xff0c;如果已经销毁&…

Microsoft 安全Copilot:适时而生的得力工具

随着数字化转型的加速&#xff0c;网络安全威胁日益增多&#xff0c;Microsoft Copilot for Security的出现恰逢其时&#xff0c;它将帮助我们更好地应对这些挑战&#xff0c;保护我们的数据和系统免受攻击。 ✦什么是Microsoft 安全Copilot✦ 概述 Microsoft 安全 Copilot 是…