数据清洗

map阶段:按行读入内容,对内容进行检查,如果字段的个数少于等于11,就删除这条日志(不保留)去除日志中字段个数小于等于11的日志内容。

<偏移量,第一行的内容> → <通过刷选之后的第一行的内容,null>

reduce阶段:不需要进行汇总。

1.编写WebLogMapper类

java 复制代码
package com.root.mapreduce.weblog;
import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class WebLogMapper extends Mapper<LongWritable, Text, Text, NullWritable>{	
	@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
    // 1. 获取一行数据,使用空格进行拆分,判断是否有9个字段
    String[] fields = value.toString().split(" ");
    if (fields.length > 7) {
        // 这条数据是有意义的,保留
        System.out.println(fields[0]);
        context.write(value, NullWritable.get());
    } else {
        // 这条数据是无意义的,不保留
        return;
    }
}
}

代码说明:NullWritable就等价于null,context.write(value,NullWritable.get())就表示只有key,没有value。

2.编写WebLogDriver类

复制代码
package com.root.mapreduce.weblog;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class WebLogDriver {
	public static void main(String[] args) throws Exception {        
		// 1 获取job信息
		Configuration conf = new Configuration();
		Job job = Job.getInstance(conf);

		// 2 加载jar包
		job.setJarByClass(LogDriver.class);

		// 3 关联map
		job.setMapperClass(WebLogMapper.class);

		// 4 设置最终输出类型
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(NullWritable.class);

		// 设置reducetask个数为0
		job.setNumReduceTasks(0);

		// 5 设置输入和输出路径
         FileInputFormat.setInputPaths(job, new Path("E:\\vm\\web.log"));
         FileOutputFormat.setOutputPath(job, new Path("E:\\vm\\ouput2"));

		// 6 提交
         boolean b = job.waitForCompletion(true);
         System.exit(b ? 0 : 1);
	}
}

代码说明:reduceTask为0,表示没有reduce阶段,程序会根据Map函数的结果把内容输出。最终输出的文件个数与mapperTask的数量一致。

相关推荐
红队it41 分钟前
【Spark+Hadoop】基于spark+hadoop游戏评论数据分析可视化大屏(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅
大数据·hadoop·分布式·算法·游戏·数据分析·spark
oMcLin1 小时前
如何在CentOS 8上配置并调优Apache Spark集群,确保大规模数据分析任务的高效运行与资源分配?
spark·centos·apache
俊哥大数据1 小时前
【项目9】 基于Spark网站流量日志大数据实时分析系统
大数据·分布式·spark
Light602 天前
从“报告”到“能力”——构建智能化、可审计的数据治理闭环——领码 SPARK 数据质量平台白皮书
大数据·分布式·spark
火龙谷2 天前
day2-采集数据
spark
大厂技术总监下海3 天前
从Hadoop MapReduce到Apache Spark:一场由“磁盘”到“内存”的速度与范式革命
大数据·hadoop·spark·开源
麦麦大数据3 天前
F052pro 基于spark推荐的中医古籍知识图谱可视化推荐系统|spark mlib|hadoop|docker集群
docker·spark-ml·spark·知识图谱·可是还·中医推荐·ehcarts
巧克力味的桃子4 天前
Spark 课程核心知识点复习汇总
大数据·分布式·spark
Light604 天前
智能重构人货场:领码SPARK破解快消行业增长困局的全景解决方案
spark·数字化转型·ai大模型·智能营销·快消行业·供应链优化
叫我:松哥4 天前
基于大数据和深度学习的智能空气质量监测与预测平台,采用Spark数据预处理,利用TensorFlow构建LSTM深度学习模型
大数据·python·深度学习·机器学习·spark·flask·lstm