【MapReduce 电商日志文件分析(二)】

MapReduce电商日志文件分析(一)
MapReduce电商日志文件分析(三)

问题二

Mapper
正常来说,每一条数据中的第14个数据项是ip地址。我们对每一条字符串按分隔符分割,因为考虑到有的一条数据存在缺失数据,所以我们将分割后数组长度小于14的数组过滤掉。再判断 ip 是否为空,不为空则通过调用ip解析的工具类,将ip转换为对应的省份并将其作为键,Reduce统计合并。

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class PageViewMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
   

    private static final IntWritable one = new IntWritable(1);
    private Text city = new Text();

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
   
        // Split the input line into fields based on the delimiter
        String[] fields = value.toString().split(</
### 使用MapReduce实现电商平台热门商品趋势分析 #### 数据准备 为了执行此操作,需先收集并整理来自电商平台上关于销售记录的日志文件。这些日志通常包含了时间戳、用户ID、商品ID以及购买数量等信息。确保数据集已清洗完毕,并存储于分布式文件系统如HDFS中。 #### Map阶段设计 Mapper函数负责处理输入键值对流中的每一项记录,在本案例里即每条交易明细。对于每一个订单详情,提取出日期(或周/月)、商品编号作为新的key;而value则设定为该次购买的数量或其他权重指标。这一步骤旨在聚合相同时间段内同一产品的销量情况[^1]。 ```java public class HotProductTrendMapper extends Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] line = value.toString().split(","); // 假设line[0]=date, line[1]=product_id, line[2]=quantity String dateProductId = line[0].substring(0,7)+"_"+line[1]; // 取年份月份组合成唯一标识符 int quantity = Integer.parseInt(line[2]); word.set(dateProductId); context.write(word, new IntWritable(quantity)); } } ``` #### Reduce阶段设计 Reducer接收由mapper产生的中间结果——按特定周期分组的商品及其对应的总销量。在此基础上计算平均数、最大最小值或是其他统计量来衡量热度变化规律。最终输出的结果可以是按照不同维度排序后的列表形式,便于后续可视化展示或进一步挖掘潜在模式。 ```java public class HotProductTrendReducer extends Reducer<Text,IntWritable,Text,DoubleWritable> { protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { double sum = 0; long count = 0; for (IntWritable val : values){ sum += val.get(); ++count; } DoubleWritable result = new DoubleWritable(sum / count); // 计算均值表示流行度 context.write(key,result); } } ``` 通过上述方法构建的MapReduce作业能够有效地帮助理解一段时间范围内哪些产品更受消费者欢迎,从而辅助决策者制定营销策略或者调整库存管理方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值