声明:许多小伙伴私信我,需要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对数据清洗,转载请注明来源!