电商日志数据分析(1)

电商日志数据分析

项目要求
根据电商日志文件,分析:

1 . 统计页面浏览量(每行记录就是一次浏览)
2 . 统计各个省份的浏览量 (需要解析IP)
3 . 日志的ETL操作(ETL:数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程)
为什么要ETL:没有必要解析出所有数据,只需要解析出有价值的字段即可。本项目中需要解析出:ip、url、pageId(topicId对应的页面Id)、country、province、city
日志内容介绍
日志产生的渠道有nginx日志、ajax加载的一些动态的图片、位置等信息。本次我们提供了一个电商日志打~/data/trackinfo_20130721.data
原始日志说明我们需要的:第二个字段=url、第十四个字段=ip、第十八个字段=时间
字段的解析:我们会从ip中解读出国家、省份、城市,从url中解析出页面的id
二、实现步骤
1.读入数据

2.编写代码
Map阶段代码如下:

protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        context.write(new Text("line"), new IntWritable(1));
 
    }

LongWritable key:输入数据的键,通常是输入数据行的偏移量。
Text value:输入数据的值,通常是输入数据行的内容。
Context context:Mapper的上下文对象,用于传递中间键值对到Reducer,或者在某些情况下直接输出最终结果。
context.write(new Text(“line”), new IntWritable(1));:在map方法中,使用context对象的write方法输出一个键值对。
new Text(“line”):创建一个新的Text对象,作为输出的键。这里硬编码为"line",意味着所有输出的键都是"line"。
new IntWritable(1):创建一个新的IntWritable对象,作为输出的值,这里硬编码为1,意味着每个输入行都会产生一个值为1的输出。
Reduce阶段代码如下:

protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int sum = 0;
        for (IntWritable val : values) {
            sum += val.get();
        }
        result.set(sum);
        context.write(key, result);
    }

(1) protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {:这是Reducer类中的reduce方法定义。它接收三个参数:

Text key:当前处理的键,通常是Mapper输出的键。
Iterable values:与该键相关联的所有值的集合。因为一个键可能会有多个值,所以这里使用Iterable接口来迭代所有的值。
Context context:Reducer的上下文对象,用于写入最终的输出结果。
(2)代码解释

int sum = 0;:初始化一个整数变量sum,用于累加所有的值。
for (IntWritable val : values) {:使用增强型for循环遍历values集合中的每个IntWritable对象。
sum += val.get();:对于集合中的每个IntWritable对象,调用它的get方法获取其整数值,并将其加到- sum变量上。
result.set(sum);:这里result是一个IntWritable对象,通过调用它的set方法来设置累加后的总和值。
context.write(key, result);:使用context对象的write方法将最终的键值对写入输出。键是传入的key,值是累加后的总和result。
3.打jar包
在Hadoop中运行jar包
最后在hdfs中查看结果

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值