MapReduce 数据清洗(ETL):从杂乱数据到可用信息
数据清洗是大数据处理的前置关键步骤,旨在去除无效、错误或冗余数据,为后续分析提供高质量输入。在 MapReduce 中,数据清洗通常只需通过 Mapper 程序实现,无需 Reduce 阶段,大幅提升效率。本文将详细解析数据清洗的原理、实现方式及实战案例。
数据清洗的核心目标与场景
核心目标
数据清洗(ETL 中的 “Extract-Transform” 环节)的核心是 “去伪存真”,具体包括:
- 去除无效数据:过滤格式错误、缺失关键字段或不符合业务规则的数据;
- 标准化格式:将数据转换为统一格式(如日期、数值格式统一);
- 去除冗余数据:删除重复记录或无用字段;
- 数据补全:对缺失的非关键字段进行合理填充(如默认值)。
典型应用场景
- 日志清洗:从用户行为日志中过滤爬虫数据、格式错误的日志;
- 数据校验:验证订单数据中的金额、日期等字段合法性;
- 格式转换:将非结构化文本转换为结构化键值对;
- 重复数据删除:去除数据库同步过程中产生的重复记录。
MapReduce 数据清洗的实现原理
为何无需 Reduce 阶段?
数据清洗的核心是 过滤和转换,通常无需聚合操作,因此可省略 Reduce 阶段:
- Mapper 负责清洗:读取原始数据,按规则过滤或转换后直接输出;
- 无 Shuffle 开销:不设置 ReduceTask(
job.setNumReduceTasks(0)),避免中间数据传输和排序; - 效率更高:数据直接从 Mapper 输出到 HDFS,减少磁盘 I/O 和 CPU 消耗。