Transform算子-使用Java开发

Transform算子-使用Java开发

 Logger.getLogger("org").setLevel(Level.WARN);
        SparkConf conf = new SparkConf();
        conf.setMaster("local[2]").setAppName("WordBlock");

        JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(2));
        JavaRDD<String> blackRDD = jssc.sparkContext().parallelize(Arrays.asList("?", "!", ",", "."));
        Broadcast<JavaRDD<String>> broadcast = jssc.sparkContext().broadcast(blackRDD);

        JavaReceiverInputDStream<String> dStream = jssc.socketTextStream("localhost", 9999);
        JavaPairDStream<String, Integer> wordOneStream = dStream.flatMap(line -> Arrays.asList(line.split(" ")).iterator())
                .mapToPair(word -> new Tuple2<>(word, 1));
        JavaPairDStream<String, Integer> result = wordOneStream.transform(new Function<JavaPairRDD<String, Integer>, JavaRDD<String>>() {
            @Override
            public JavaRDD<String> call(JavaPairRDD<String, Integer> pairRDD) throws Exception {
                JavaRDD<String> blackBroadcast = broadcast.getValue();
                JavaPairRDD<String, Boolean> blackRDD = blackBroadcast.mapToPair(word -> new Tuple2<>(word, true));
                JavaPairRDD<String, Tuple2<Integer, Optional<Boolean>>> resultRDD = pairRDD.leftOuterJoin(blackRDD);
                JavaRDD<String> resultString = resultRDD.filter(new Function<Tuple2<String, Tuple2<Integer, Optional<Boolean>>>, Boolean>() {
                    @Override
                    public Boolean call(Tuple2<String, Tuple2<Integer, Optional<Boolean>>> resultTuple2) throws Exception {

                        return !resultTuple2._2._2.isPresent();
                    }
                }).map(new Function<Tuple2<String, Tuple2<Integer, Optional<Boolean>>>, String>() {
                    @Override
                    public String call(Tuple2<String, Tuple2<Integer, Optional<Boolean>>> stringTuple2) throws Exception {
                        return stringTuple2._1;
                    }
                });
                return resultString;
            }
        }).mapToPair(word -> new Tuple2<>(word, 1)).reduceByKey((v1, v2) -> v1 + v2);
        result.print();

        jssc.start();
        jssc.awaitTermination();
        jssc.stop();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值