spark stream数据去重问题

magicasshe 发布于 2016/06/21 14:17
阅读 1K+
收藏 0

项目背景,日志数据的处理,但是有数据可能出现重复,现在需要在spark streaming中进行去重处理,一行数据是相同的,

spark streaming的duration配置未1s,数据从kafka里面读取,首先mapToPair,然后使用reduceByKey的方式进行去重处理,但是spark streaming是按照时间流的方式进行batch处理,如果数据正好被切到了两个时间片,就可能导致数据重复,请大家看看有什么好办法来处理这个问题????

mapToPair(deviceRoomLog -> {
    String roomLog = JsonUtil.getInstance().parser(deviceRoomLog);
    Wrapper<DeviceRoomLog> wrapper = new Wrapper<DeviceRoomLog>(deviceRoomLog,System.currentTimeMillis()); return new Tuple2<String, Wrapper<DeviceRoomLog>>(roomLog, wrapper);
}).reduceByKey((wrapper1, wrapper2) -> { //取时间最小的tuple  return wrapper1.getTimeInMili() < wrapper2.getTimeInMili() ? wrapper1 : wrapper2;
}).map(wrapper -> { return new KeyedMessage<String, String>(SysConstants.KAFKA_TOPIC_ROOM_LOG,
            Generator.getInstance().generatorId(),
            JsonUtil.getInstance().parser(wrapper.getData()));
}).foreachRDD(rdd -> {
    rdd.foreach(message -> { producer.send(message);
    }); return null;
});

加载中
返回顶部
顶部