当前位置: 首页 > news >正文

数据清洗

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

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

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

1.编写WebLogMapper类

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的数量一致。

相关文章:

  • Java学习-异常抛出及自定义
  • Go语言从零构建SQL数据库(5)-Pratt解析算法:SQL表达式解析的核心引擎
  • 第一个简易SSM框架项目
  • 浙江大学DeepSeek系列专题线上公开课第二季第四期即将上线!端云协同:让AI更懂你的小心思! - 张圣宇 研究员
  • TuGraph图数据库使用尝试过程(图文讲解)
  • java: 找不到符号 符号: 变量 log
  • C语言的泛型函数,可以模拟C++的模版效果
  • C++(初阶)(十)——vector模拟实现
  • 什么是RACI矩阵,应用在什么场景?
  • R语言空间水文气象数据分析:从插值到动态可视化
  • CUDA 与 OpenCL 对比
  • Porting Layer - 跨平台函数接口封装(RTOS/Windows)- C语言
  • 智慧医疗数据集
  • 跨境多商户供销电商系统:三位一体生态,赋能企业全球化无界合作
  • 在MDK新版本中添加AC5编译器支持
  • 演员徐梓辰正式加入创星演员出道计划,开启演艺新纪元
  • vmware、centos: 快照、redis集群克隆、启动异常
  • 流程控制语句练习题总结
  • OJ--第N个泰波那契数列
  • 钢板矫平机:重塑材料加工新标杆
  • 建湖人才网/seo优化技术是什么
  • 个人网站开发工具/域名服务器ip地址查询
  • 学做网站论坛/seo优化便宜
  • css网站开发实录/广告联盟点击赚钱平台
  • 网站关键词推广哪家好/百度云官方网站
  • 做侵权电影网站什么后果/如何进行关键词优化工作