Hbase过滤记录数问题(新增UV/活跃UV)

 

public static Configuration initConf(Configuration conf, String date)
		throws IOException {
	Scan scan = new Scan();
	scan.setCaching(300);
	scan.setMaxVersions();
	scan.addFamily(HTableConstant.IPJ_STATICS_INDEX_IMEI_FAMILY);
	scan.addColumn(HTableConstant.IPJ_STATICS_INDEX_IMEI_FAMILY, 
			HTableConstant.IPJ_STATICS_INDEX_VERSION_QUALIFIER);
	scan.addColumn(HTableConstant.IPJ_STATICS_INDEX_IMEI_FAMILY,
			HTableConstant.IPJ_STATICS_INDEX_TIME_QUALIFIER);
	scan.addColumn(HTableConstant.IPJ_STATICS_INDEX_IMEI_FAMILY,
			HTableConstant.IPJ_STATICS_INDEX_DATE_QUALIFIER);
	FilterList list = new FilterList();
	HBaseManager.addTimeStampExcludeFilter(list,
			HTableConstant.IPJ_STATICS_INDEX_IMEI_FAMILY,
			HTableConstant.IPJ_STATICS_INDEX_DATE_QUALIFIER,
			Bytes.toBytes(date));
	scan.setFilter(list);
	conf.set("date", date);
	conf.set(TableInputFormat.INPUT_TABLE,
	HTableConstant.ACCESS_INDEX_TABLE_NAME);
	conf.set(TableInputFormat.SCAN, StatUtils.convertScanToString(scan));
	return conf;
}

 使用上面的方法进行过滤(addTimeStampExcludeFilter)的话,map中获取app_id

imei的方法:

protected void map(ImmutableBytesWritable key, Result value, Context context)
		throws IOException, InterruptedException {

	String keyStr = Bytes.toString(key.get());
	String appIdStr = keyStr.substring(2, 4);
	byte[] app_id = Bytes.toBytes(appIdStr);
	byte[] imei = keyStr.substring(4).getBytes();
	
	// if version = 2
	if (value.raw().length == 2) {
		byte[] version = value.getValue(
				HTableConstant.IPJ_STATICS_INDEX_IMEI_FAMILY,
				HTableConstant.IPJ_STATICS_INDEX_VERSION_QUALIFIER);
		byte[] time = value.getValue(
				HTableConstant.IPJ_STATICS_INDEX_IMEI_FAMILY,
				HTableConstant.IPJ_STATICS_INDEX_TIME_QUALIFIER);
		
		if (version != null) {
			outkey.set(app_id, 0, app_id.length, version,
			imei, time);
			context.write(outkey, ONE);
		}
	}
}

 value.raw().length的值:

1.job中过滤一行时,那么 value.raw().length = 1 表示新增UV

value.raw().length > 1 表示活跃UV

2.job中过滤两行时,那么(上述代码情况)

value.raw().length = 2 表示新增UV

value.raw().length > 2 表示活跃UV

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值