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.rdd
      
      import 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上的结果文件

相关推荐

  1. 网站访问指标

    2024-05-16 09:56:06       54 阅读
  2. mysql根据datetime统计每日数据

    2024-05-16 09:56:06       26 阅读
  3. Redis实现网站访问人数统计

    2024-05-16 09:56:06       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-16 09:56:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-16 09:56:06       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-16 09:56:06       82 阅读
  4. Python语言-面向对象

    2024-05-16 09:56:06       91 阅读

热门阅读

  1. Golang中HTTP包的内存泄漏

    2024-05-16 09:56:06       30 阅读
  2. Spring Batch 是什么?主要用于什么场景?

    2024-05-16 09:56:06       30 阅读
  3. Gateway基本配置的参数以及yml示例

    2024-05-16 09:56:06       35 阅读
  4. error in ./src/assets/css/element-variables.scss

    2024-05-16 09:56:06       32 阅读
  5. matlab实现马尔科夫链

    2024-05-16 09:56:06       37 阅读
  6. SpringBoot自定义Starter

    2024-05-16 09:56:06       33 阅读
  7. lambda函数(匿名函数)的使用

    2024-05-16 09:56:06       35 阅读
  8. 在本地设备上配置 Git 忽略特定文件

    2024-05-16 09:56:06       34 阅读
  9. 解释 Git 的基本概念和使用方式。

    2024-05-16 09:56:06       30 阅读
  10. 51 单片机[2-3]:LED流水灯

    2024-05-16 09:56:06       36 阅读