• Hadoop基础(二十八):数据清洗(ETL)(一)简单解析版


    数据清洗案例实操-简单解析版

    运行核心业务MapReduce程序之前,往往要先对数据进行清洗,清理掉不符合用户要求的数据。清理的过程往往只需要运行Mapper程序,不需要运行Reduce程序。

    1.需求

    去除日志中字段长度小于等于11的日志。

    1)输入数据

    (2)期望输出数据

    每行字段长度都大于11

    2.需求分析

    需要Map阶段对输入的数据根据规则进行过滤清洗。

    3.实现代码

    1)编写LogMapper类

    package com.atguigu.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 LogMapper extends Mapper<LongWritable, Text, Text, NullWritable>{
        
        Text k = new Text();
        
        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            
            // 1 获取1行数据
            String line = value.toString();
            
            // 2 解析日志
            boolean result = parseLog(line,context);
            
            // 3 日志不合法退出
            if (!result) {
                return;
            }
            
            // 4 设置key
            k.set(line);
            
            // 5 写出数据
            context.write(k, NullWritable.get());
        }
    
        // 2 解析日志
        private boolean parseLog(String line, Context context) {
    
            // 1 截取
            String[] fields = line.split(" ");
            
            // 2 日志长度大于11的为合法
            if (fields.length > 11) {
    
                // 系统计数器
                context.getCounter("map", "true").increment(1);
                return true;
            }else {
                context.getCounter("map", "false").increment(1);
                return false;
            }
        }
    }
    View Code

    2)编写LogDriver

    package com.atguigu.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 LogDriver {
    
        public static void main(String[] args) throws Exception {
    
    // 输入输出路径需要根据自己电脑上实际的输入输出路径设置
            args = new String[] { "e:/input/inputlog", "e:/output1" };
    
            // 1 获取job信息
            Configuration conf = new Configuration();
            Job job = Job.getInstance(conf);
    
            // 2 加载jar包
            job.setJarByClass(LogDriver.class);
    
            // 3 关联map
            job.setMapperClass(LogMapper.class);
    
            // 4 设置最终输出类型
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(NullWritable.class);
    
            // 设置reducetask个数为0
            job.setNumReduceTasks(0);
    
            // 5 设置输入和输出路径
            FileInputFormat.setInputPaths(job, new Path(args[0]));
            FileOutputFormat.setOutputPath(job, new Path(args[1]));
    
            // 6 提交
            job.waitForCompletion(true);
        }
    }
  • 相关阅读:
    学习Asp.Net经常会用到的函数集
    string.Format 格式化时间,货币
    sqlite相关
    sql常用判断语句
    ToString() 格式 用法大全 保留 两位 小数
    一些常用短代码,页面缓存啥的
    判断iE并创建A标签
    Java学习之数组1(1.数组的声明;2.元素为引用数据类型的数组;3.关于main方法里的String[] args;4.数组排序;5.数3退1 数组算法,(用数组模拟链表);6数组查找之二分法;7数组的拷贝)
    Java学习之异常处理()
    Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与LinkedHashSet类))
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/13341170.html
Copyright © 2020-2023  润新知