key算法问题

2012-01-02 00:23:03
首先我们需要两个算法
算法1:
输入: 2012-01-02 00:23:03
输出: 201201020023

算法2:
输入: 2012 ,1 ,2
输出:当天全部2012010200xx key的集合

算法1的实现:

Scala streaming RDD代码:
   messages.foreachRDD(x => {
      x.foreach(part => {
        val colArray = UrlBase64Util.decodeStr(part.value()).split("\001")
        println("uid= " + colArray(2))
        println("mid= " + colArray(8))
        val timeKey = "wtx_bidscreen01_" + UtilStringTime.getStringTime4Key(colArray(8))
        println(timeKey)

        val jedis = new RedisUtil("localhost", "6379");
        jedis.pfAdd(timeKey, colArray(2))
        System.out.println(jedis.pfCount(timeKey));
        jedis.close();
      })
})
时间格式化工具类:这里就不用dataformate处理了,直接循环判断就可以
public static String getStringTime4Key(String dt) {
		
		String key=dt.substring(0,4)+dt.substring(5,7)+dt.substring(8,10)+dt.substring(11,13);
		int key_index_2_id=Integer.parseInt(dt.trim().substring(14,16));
		int key_index_3_id=Integer.parseInt(dt.trim().substring(17));
		if (key_index_2_id>60) {
			return null;
		}
		
		String strTimeKey_last;
		if (key_index_2_id%5!=0) {
			strTimeKey_last=((key_index_2_id/5))*5+"";
		}else {
			if (key_index_3_id==0) {
				strTimeKey_last=((key_index_2_id/5)-1)*5+"";
			}else {
				strTimeKey_last=((key_index_2_id/5))*5+"";
			}
		}
		return key+strTimeKey_last;
	
	}
元数据就不放出来了,本子就是截取字符串

算法2:


public List<String> getIOData4RealTimeDate2RedisKey(String year,String month,String day){
	if (year.trim().length()<4) {
		return null;
	}else if (month.trim().length()<1) {
		return null;
	}else if(day.trim().length()<1) {
		return null;
	}
	//边界检查完成后,进行规则填充,这里省去正则校验,太麻烦没必要
	if (month.length()==1) {
		month=0+month;
	}
	if (day.length()==1) {
		day=0+day;
	}
	String finalstr;
	String fist_key=year.trim()+month.trim()+day.trim();
	List<String> list=new ArrayList<String>();
	//小时-xx两个字段一共24个小时  0-23
	String hour;
	String minuts;
	for (int i = 0; i < 24; i++) {
		String str=i+"";
		if (str.trim().length()<2) {
			str=0+str;
		}
		
		for (int j = 0; j < 12; j++) {
			String seconds=5*j+"";
			finalstr=fist_key+str+seconds.trim();
			list.add(finalstr);
		}
	}
	//分钟-x,xx一个或者两个字段,从0-60 对5求余为0的整数
	return list;
}
public static void main(String[] args) {
	DataUtil dataUtil=new DataUtil();
	List<String> list=dataUtil.getIOData4RealTimeDate2RedisKey("2012", "1", "2");
	for (String string : list) {
		System.out.println(string);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值