关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

数据清洗

发布时间:2021-04-16 11:13:42

数据清洗

1:什么是ETL


ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程


ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据


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

清理的过程往往只需要运行Mapper程序,不需要运行Reduce程序。


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

需求分析

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

(1)输入数据


194.237.142.21 - - [18/Sep/2013:06:49:18 +0000] "GET /wp-content/uploads/2013/07/rstudio-git3.png HTTP/1.1" 304 0 "-" "Mozilla/4.0 (compatible;)"

183.49.46.228 -

163.177.71.12 - - [18/Sep/2013:06:49:33 +0000] "HEAD / HTTP/1.1" 200 20 "-" "DNSPod-Monitor/1.0"

1

2

3

(2)期望输出数据

每行字段长度都大于11。


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


实现代码

(1)编写LogMapper类


package com.dev1.weblog;

//ETL 抽取 清洗 转换  加载

//清洗    去除掉长度<=11的log

//int countTrue = 0;

//int countFalse = 0;

public class LogMapper extends Mapper<LongWritable, Text, Text, NullWritable> {

    @Override

  protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        //读取行

  String line = value.toString();

        //调用一个判断长度的方法

  boolean result = parseLog(line);


        if(result){

            //写到磁盘

  Text text = new Text();

            text.set(line);

            context.write(text,NullWritable.get());

            context.getCounter("etl","countTrue").increment(1);

        }else{

            //什么也不处理

  context.getCounter("etl","countFalse").increment(1);

        }

    }


    private boolean parseLog(String line) {

        //判断当前log的长度是>=11的吗?  ["a","BCD"]

 //当前的line 通过 split切割,得到数组的元素>11

  String[] arr = line.split(" ");

        if( arr . length >11){

            return true;

        }else{

            return false;

        }

  

(2)编写LogDriver类


package com.dev1.weblog;

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);

    }


/template/Home/News/PC/Static
var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?3055b648e71c7d34d18c96db95a87337"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();
客服中心
点击二维码下边按钮可通过微信联系客服进行沟通
QICQ支持
处理:机器咨询,产品优惠,售后处理服务器状态异常等,10分钟内响应
微信支持
工单服务
提交工单:在线工单入口
工单处理:网络延时,机器状态异常,网站备案等,10分钟内响应
投诉/合作
滥用举报:abuse@wuyouyun.com
商务合作:business@wuyouyun.com
服务投诉:微信处理入口
处理:投诉,建议,代理,大客户,我们会全力以赴满足您的服务请求