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);
}
}