Flink批处理WordCount代码实现

1.在Idea工程根目录下新建一个 input 文件夹,并在下面创建文本文件 words.txt

2.在 words.txt 中输入一些文字,例如:

hello world
hello flink
hello java

 3.在 com.atguigu.chapter02 包下新建 Java 类 BatchWordCount,在静态 main 方法中编
写测试代码。

我们进行单词频次统计的基本思路是:先逐行读入文件数据,然后将每一行文字拆分成单
词;接着按照单词分组,统计每组数据的个数,就是对应单词的频次。

package com.atguigu.wc;

import akka.routing.RoutedActorCell;
import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.AggregateOperator;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.api.java.operators.FlatMapOperator;
import org.apache.flink.api.java.operators.UnsortedGrouping;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;

import java.util.Collection;
import java.util.concurrent.ExecutionException;

public class BatchWordCount {
    public static void main(String[] args) throws Exception{
        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
        DataSource<String>  lineDataSource = env.readTextFile("input/words.txt");

        FlatMapOperator<String ,Tuple2<String, Long>> wordAndOneTuple = lineDataSource.flatMap((String line, Collector<Tuple2<String, Long>> out) -> {
            String[] words = line.split(" ");
            for (String word:words){
                out.collect(Tuple2.of(word,1L));
            }
        })
                .returns(org.apache.flink.api.common.typeinfo.Types.TUPLE(org.apache.flink.api.common.typeinfo.Types.STRING, Types.LONG));

        UnsortedGrouping<Tuple2<String,Long>> wordAndOneGroup = wordAndOneTuple.groupBy(0);

        AggregateOperator<Tuple2<String, Long>> sum = wordAndOneGroup.sum(1);

        sum.print();
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值