首页 » 技术分享 » ETL对数据清洗

ETL对数据清洗

 

声明:许多小伙伴私信我,需要trackinfo_20130721.data,可以通过百度云 链接:https://pan.baidu.com/s/1aVpU3k3mddyaIkmXPmwnrg 提取码:nilv 来获取,或者可以从我的csdn资源中下载。

ETL
描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。

有时候面对大量的数据,我们不方便进行计算,这个时候就需要进行相应的维度分析,解析出你需要的字段,去除一些你不需要的字段,然后进行分析

package project.mrv2;

import com.imooc.bigdata.hadoop.hdfs.mr.project.utils.ContentUtils;
import com.imooc.bigdata.hadoop.hdfs.mr.project.utils.LogParser;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import javax.naming.Context;
import java.io.IOException;
import java.util.Map;

public class ETLApp {

    // Driver端的代码:八股文
    public static void main(String[] args) throws Exception{
        Configuration configuration = new Configuration();

        // 如果输出目录已经存在,则先删除
        FileSystem fileSystem = FileSystem.get(configuration);
        Path outputPath = new Path("input/etl/");
        if(fileSystem.exists(outputPath)) {
            fileSystem.delete(outputPath,true);
        }

        Job job = Job.getInstance(configuration);
        job.setJarByClass(ETLApp.class);

        job.setMapperClass(MyMapper.class);

        job.setMapOutputKeyClass(NullWritable.class);
        job.setMapOutputValueClass(Text.class);

        FileInputFormat.setInputPaths(job, new Path("input/trackinfo_20130721.data"));
        FileOutputFormat.setOutputPath(job, new Path("input/etl/"));

        job.waitForCompletion(true);
    }

    static class MyMapper extends Mapper<LongWritable, Text, NullWritable, Text> {

        private LogParser parser;

        @Override
        protected void setup(Context context) throws IOException, InterruptedException {
            parser = new LogParser();
        }

        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            String log = value.toString();
            Map<String, String> logInfo = parser.parse(log);

            String ip = logInfo.get("ip");
            String url = logInfo.get("url");
            String sessionId = logInfo.get("sessionId");
            String time = logInfo.get("time");
            String country = logInfo.get("country") == null ? "-" : logInfo.get("country");
            String province = logInfo.get("province")== null ? "-" : logInfo.get("province");
            String city = logInfo.get("city")== null ? "-" : logInfo.get("city");
            String pageId = ContentUtils.getPageId(url)== "" ? "-" : ContentUtils.getPageId(url);

            StringBuilder builder = new StringBuilder();
            builder.append(ip).append("\t");
            builder.append(url).append("\t");
            builder.append(sessionId).append("\t");
            builder.append(time).append("\t");
            builder.append(country).append("\t");
            builder.append(province).append("\t");
            builder.append(city).append("\t");
            builder.append(pageId);

            if (StringUtils.isNotBlank(pageId) && !pageId.equals("-")) {
                System.out.println("------" + pageId);
            }


            context.write(NullWritable.get(), new Text(builder.toString()));
        }
    }
}


这是对部分清洗后的数据运行结果

8.243.250.148	http://search.1mall.com/s2/c0-0/k%25E5%25A4%25A7%25E5%258D%25B0%25E8%25B1%25A1/1/	null	2013-07-21 09:05:54	中国	安徽省	阜阳市	 
111.120.14.51	http://www.1mall.com/item/10321169_23?ref=pms_84_17_45	null	2013-07-21 00:03:28	中国	贵州省	贵阳市	 
113.0.89.77	http://www.yihaodian.com/item/7016227_2?tracker_u=6258&tracker_type=1&website_id=507564&uid=004b72df05b743e8b8ab	null	2013-07-21 10:57:30	中国	黑龙江省	哈尔滨市	 
113.0.89.77	http://www.yihaodian.com/item/7016227_11?uid=004b72df05b743e8b8ab&tracker_type=1&tracker_u=6258&website_id=507564	null	2013-07-21 10:57:35	中国	黑龙江省	哈尔滨市	 
124.31.216.235	http://channel.yihaodian.com/meihu/1/	null	2013-07-21 09:20:46	中国	西藏	-	 
124.31.216.235	http://www.yihaodian.com/1/?tracker_u=10319113604&type=4	null	2013-07-21 09:19:56	中国	西藏	-	 
124.31.216.235	http://channel.yihaodian.com/meihu/1/	null	2013-07-21 09:20:45	中国	西藏	-	 
180.115.131.142	http://m.1mall.com/mw/productsquid/7053123/5/30/	null	2013-07-21 07:50:20	中国	江苏省	常州市	 
112.65.211.155	http://www.yihaodian.com/1/?tracker_u=1624169&type=1	null	2013-07-21 22:42:43	中国	上海市	徐汇区	 
112.65.211.155	http://www.yihaodian.com/1/?tracker_u=1624169&type=1	null	2013-07-21 22:42:42	中国	上海市	徐汇区	 
113.95.112.193	https://passport.yihaodian.com/passport/login_input.do?returnUrl=http%3A%2F%2Fmy.yihaodian.com%3A80%2Fmember%2Fexp%2Fcomment.do	null	2013-07-21 17:24:31	中国	广东省	云浮市	 
113.95.112.193	http://www.yihaodian.com/item/1019871_1	null	2013-07-21 17:20:52	中国	广东省	云浮市	 
113.95.112.193	http://www.yihaodian.com/item/lp/139224_10842066_1	null	2013-07-21 17:24:12	中国	广东省	云浮市	 
113.95.112.193	http://search.yihaodian.com/s2/c0-0/k%E6%91%A9%E5%8D%A1%E5%92%96%E5%95%A1/1/	null	2013-07-21 17:21:17	中国	广东省	云浮市	 
113.95.112.193	http://www.yihaodian.com/cmsPage/show.do?pageId=48963&provinceId=1	null	2013-07-21 17:23:44	中国	广东省	云浮市	 
113.95.112.193	http://www.yihaodian.com/1/?tracker_u=10358413080&mz_ca=1006833&mz_sp=3yeZU0&mz_sb=1&type=1	null	2013-07-21 17:22:12	中国	广东省	云浮市	 
113.95.112.193	http://www.yihaodian.com/dqg/1/	null	2013-07-21 17:22:25	中国	广东省	云浮市

转载自原文链接, 如需删除请联系管理员。

原文链接:ETL对数据清洗,转载请注明来源!

0