任务目标
统计给定用户访问历史数据中,每日的新增用户数量。
数据准备
- 原始数据格式:每行包含两个字段,日期和用户名,以逗号分隔。
- 示例数据:
2024-05-01,mike 2024-05-01,alice 2024-05-01,brown ...
解决方案
- 使用倒排索引法,将用户名映射到其首次访问的日期。
- 统计每个日期的出现次数,即为该日期的新增用户数。
环境准备
- 本地创建用户文件
users.txt
并上传至 HDFS。 - 启动 Spark Shell 或创建 Spark 项目。
交互式实现步骤
-
启动 Spark Shell:
spark-shell --master spark://master:7077
-
读取数据:
val rdd1 = sc.textFile("hdfs://master:9000/newusers/input/users.txt")
-
倒排索引:
val rdd2 = rdd1.map(line => line.split(",") match { case Array(date, user) => (user, date) })
-
按键分组:
val rdd3 = rdd2.groupByKey()
-
最小日期映射:
val rdd4 = rdd3.mapValues(dates => dates.min)
-
计数统计:
val result = rdd4.countByKey()
-
排序输出:
val keys = result.keys.toList.sorted keys.foreach(key => println(s"$key 新增用户数:$result(key)"))
Spark 项目实现步骤
-
创建 Maven 项目,配置 Scala 版本和 Spark 依赖。
-
添加 Scala SDK 和 日志配置文件。
-
创建 HDFS 配置文件,设置客户端访问权限。
-
编写 Scala 程序
CountNewUsers
,实现上述逻辑。 -
运行程序,查看 HDFS 上的输出结果。
结果验证
- 验证输出结果是否与期望统计结果一致。
- 示例期望结果:
2024-05-01 新增用户数:3 2024-05-02 新增用户数:1 2024-05-03 新增用户数:2
总结
本实战概述展示了如何使用 Apache Spark 的 RDD 来处理和分析用户访问数据,以统计每日的新增用户数。通过交互式实现和项目化实现两种方式,本概述提供了详细的步骤和代码示例,确保了任务的可操作性和可复现性。