业务场景为,统计随访表中最近一次访问,且金额小于7 的总数。
随访表phs_visit主键为ID对应多条访问记录, 需要统计取ID的最大访问时间visitDate, FBS小于7的数据, 统计ID的总数。网上排序方法 sortByKey(), 不能实现对Value的排序。请大神看看有办法解决么?代码如下:(怎么实现对visitTime 实现排序,取最大visitTime记录?)JavaSparkContext ctx = new JavaSparkContext(new SparkConf().setAppName("visitReport"));//HBaseUtils.readFromHBase方法为封装好的,从Hbase中读取数据
JavaPairRDD<ImmutableBytesWritable, Result> visitHbaseRDD = HBaseUtils.readFromHBase(ctx, "phs_visit"); JavaPairRDD<String, Tuple2<String, Long>> visitRdd = visitHbaseRDD.mapToPair(tuple -> {
Result rs = tuple._2();
String id = ""; //编号
String FBS = ""; //金额
String visitDate = ""; //本次随访时间 if (rs != null && rs.getRow() != null) { if (rs.getValue("CF".getBytes(), "ID".getBytes()) != null) {
id = Bytes.toString(rs.getValue("CF".getBytes(), "ID".getBytes())).trim();
} if (rs.getValue("CF".getBytes(), "FBS".getBytes()) != null) {
FBS = Bytes.toString(rs.getValue("CF".getBytes(), "FBS".getBytes())).trim();
} if (rs.getValue("CF".getBytes(), "VISITDATE".getBytes()) != null) {
visitDate = Bytes.toString(rs.getValue("CF".getBytes(), "VISITDATE".getBytes())).trim();
}
} Long visitTime = 0L;
if(!StringUtils.isBlank(visitDate)) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date inputDate = dateFormat.parse(visitDate);
visitTime = inputDate.getTime();
}
return new Tuple2<>(id, new Tuple2<>(FBS, visitTime));
});
随访表phs_visit主键为ID对应多条访问记录, 需要统计取ID的最大访问时间visitDate, FBS小于7的数据, 统计ID的总数。网上排序方法 sortByKey(), 不能实现对Value的排序。请大神看看有办法解决么?代码如下:(怎么实现对visitTime 实现排序,取最大visitTime记录?)JavaSparkContext ctx = new JavaSparkContext(new SparkConf().setAppName("visitReport"));//HBaseUtils.readFromHBase方法为封装好的,从Hbase中读取数据
JavaPairRDD<ImmutableBytesWritable, Result> visitHbaseRDD = HBaseUtils.readFromHBase(ctx, "phs_visit"); JavaPairRDD<String, Tuple2<String, Long>> visitRdd = visitHbaseRDD.mapToPair(tuple -> {
Result rs = tuple._2();
String id = ""; //编号
String FBS = ""; //金额
String visitDate = ""; //本次随访时间 if (rs != null && rs.getRow() != null) { if (rs.getValue("CF".getBytes(), "ID".getBytes()) != null) {
id = Bytes.toString(rs.getValue("CF".getBytes(), "ID".getBytes())).trim();
} if (rs.getValue("CF".getBytes(), "FBS".getBytes()) != null) {
FBS = Bytes.toString(rs.getValue("CF".getBytes(), "FBS".getBytes())).trim();
} if (rs.getValue("CF".getBytes(), "VISITDATE".getBytes()) != null) {
visitDate = Bytes.toString(rs.getValue("CF".getBytes(), "VISITDATE".getBytes())).trim();
}
} Long visitTime = 0L;
if(!StringUtils.isBlank(visitDate)) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date inputDate = dateFormat.parse(visitDate);
visitTime = inputDate.getTime();
}
return new Tuple2<>(id, new Tuple2<>(FBS, visitTime));
});
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货