任务3.8.3 利用RDD统计每日新增用户

任务目标

统计给定用户访问历史数据中,每日的新增用户数量。

数据准备

  • 原始数据格式:每行包含两个字段,日期和用户名,以逗号分隔。

  • 示例数据:

    2024-05-01,mike
    2024-05-01,alice
    2024-05-01,brown
    ...
    

解决方案

  • 使用倒排索引法,将用户名映射到其首次访问的日期。
  • 统计每个日期的出现次数,即为该日期的新增用户数。

环境准备

  • 本地创建用户文件 users.txt 并上传至 HDFS。
  • 启动 Spark Shell 或创建 Spark 项目。

交互式实现步骤

  1. 启动 Spark Shell

    shell 复制代码
    spark-shell --master spark://master:7077
  2. 读取数据

    scala 复制代码
    val rdd1 = sc.textFile("hdfs://master:9000/newusers/input/users.txt")
  3. 倒排索引

    scala 复制代码
    val rdd2 = rdd1.map(line => line.split(",") match { case Array(date, user) => (user, date) })
  4. 按键分组

    scala 复制代码
    val rdd3 = rdd2.groupByKey()
  5. 最小日期映射

    scala 复制代码
    val rdd4 = rdd3.mapValues(dates => dates.min)
  6. 计数统计

    scala 复制代码
    val result = rdd4.countByKey()
  7. 排序输出

    scala 复制代码
    val keys = result.keys.toList.sorted
    keys.foreach(key => println(s"$key 新增用户数:$result(key)"))

Spark 项目实现步骤

  1. 创建 Maven 项目,配置 Scala 版本和 Spark 依赖。

  2. 添加 Scala SDK日志配置文件

  3. 创建 HDFS 配置文件,设置客户端访问权限。

  4. 编写 Scala 程序 CountNewUsers,实现上述逻辑。

  5. 运行程序,查看 HDFS 上的输出结果。

结果验证

  • 验证输出结果是否与期望统计结果一致。

  • 示例期望结果:

    2024-05-01 新增用户数:3
    2024-05-02 新增用户数:1
    2024-05-03 新增用户数:2
    

总结

本实战概述展示了如何使用 Apache Spark 的 RDD 来处理和分析用户访问数据,以统计每日的新增用户数。通过交互式实现和项目化实现两种方式,本概述提供了详细的步骤和代码示例,确保了任务的可操作性和可复现性。

相关推荐
PersistJiao11 分钟前
Spark RDD 的宽依赖和窄依赖
spark·rdd·宽窄依赖
PersistJiao16 小时前
Spark RDD(弹性分布式数据集)的深度理解
大数据·分布式·spark·rdd
PersistJiao2 天前
Spark RDD Checkpoint 数据的保存机制
spark·checkpoint·rdd
PersistJiao2 天前
Spark RDD 的 sortBy 和全局排序的理解差异
大数据·分布式·spark·rdd·sortby
PersistJiao3 天前
Spark RDD 的 combineByKey、cogroup 和 compute 算子的作用
大数据·spark·rdd·底层算子
PersistJiao3 天前
Spark RDD sortBy算子什么情况会触发shuffle
大数据·spark·rdd·shuffle·sortby
PersistJiao5 天前
Spark RDD各种join算子从源码层分析实现方式
spark·rdd·算子·join
PersistJiao5 天前
Spark RDD 的 compute 方法
大数据·spark·rdd·compute
PersistJiao7 天前
Spark RDD中常用聚合算子源码层面的对比分析
spark·源码分析·rdd·聚合算子
lzhlizihang17 天前
【RDD算子的分类】RDD的转换算子和触发算子(行为算子)、以及各个算子的作用,对比sql中的关键字
spark·转换算子·rdd·rdd算子·触发算子