package com.platform.website.transformer.mr.nu; import com.platform.website.common.KpiType; import com.platform.website.transformer.model.dim.StatsUserDimension; import com.platform.website.transformer.model.value.map.TimeOutputValue; import com.platform.website.transformer.model.value.reduce.MapWritableValue; import java.io.IOException; import java.util.HashSet; import java.util.Set; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.MapWritable; import org.apache.hadoop.mapreduce.Reducer; /** * 计算new install user的reduce类 */ public class NewInstallUserReducer extends Reducer<StatsUserDimension, TimeOutputValue, StatsUserDimension, MapWritableValue> { private MapWritableValue outputValue = new MapWritableValue(); private Set<String> unique = new HashSet<String>(); @Override protected void reduce(StatsUserDimension key, Iterable<TimeOutputValue> values, Context context) throws IOException, InterruptedException { this.unique.clear(); //开始计算uuid的个数 for (TimeOutputValue value : values) { this.unique.add(value.getId()); } MapWritable map = new MapWritable(); map.put(new IntWritable(-1), new IntWritable(this.unique.size())); //设置kpi名称 String kpiName = key.getStatsCommon().getKpi().getKpiName(); if (KpiType.NEW_INSTALL_USER.name.equals(kpiName)) { //计算stats_user表中的新增用户 outputValue.setKpi(KpiType.NEW_INSTALL_USER); } else if (KpiType.BROWSER_NEW_INSTALL_USER.name.equals(kpiName)) { //计算stats_device_browser的新增用户 outputValue.setKpi(KpiType.BROWSER_NEW_INSTALL_USER); } outputValue.setValue(map); context.write(key, outputValue); } }