Flink入门WordCount批处理实现

New Project:

Flink入门WordCount批处理实现_第1张图片

Flink入门WordCount批处理实现_第2张图片

Flink入门WordCount批处理实现_第3张图片

 引入pom:



    4.0.0

    com.wyh.test
    FlinkDemo1
    1.0-SNAPSHOT

    
        8
        8
    


    
        
        
            org.apache.flink
            flink-java
            1.13.0
        
        
            org.apache.flink
            flink-streaming-java_2.12
            1.13.0
        
        
            org.apache.flink
            flink-clients_2.12
            1.13.0
        

        
            org.slf4j
            slf4j-api
            1.7.30
        
        
            org.slf4j
            slf4j-log4j12
            1.7.30
        
        
            org.apache.logging.log4j
            log4j-to-slf4j
            2.14.0
        
    

src/main/resource下创建log4j.properties:

Flink入门WordCount批处理实现_第4张图片

log4j.rootLogger=error, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

新建包:

Flink入门WordCount批处理实现_第5张图片

在根目录下新建一个目录,然后席间一个测试数据文件:

Flink入门WordCount批处理实现_第6张图片

新建类:

package test.yh;


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;


public class TestBatchWordCount {

    public static void main(String[] args) throws Exception {
        //创建执行环境
        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

        //从数据文件读取数据
        DataSource everyLineSource = env.readTextFile("test_word_dire/testword.txt");

        //对每行源数据分词,转换成二元元组类型
        FlatMapOperator> wordAndOneTuple = everyLineSource.flatMap((String everyLine, Collector> out) -> {
                    //按照空格对每行数据进行分隔
                    String words[] = everyLine.split(" ");
                    //对每个单词转换成二元元组,count都置为1
                    for(String word: words){
                        out.collect(Tuple2.of(word, 1L));
                    }
                })
                //擦除泛型
                .returns(Types.TUPLE(Types.STRING, Types.LONG));

        //根据word进行分组
        //因为在元组中我们把word放在了第一个元素,也就是索引为1的位置,所以我们在groupBy时就可以按照索引为0的元素作为Key进行分组
        //这个过程得到的结果就是把前面每个(word,1)这样的散乱的元组分组之后变成了将相同的key的(word,1)放在一起
        UnsortedGrouping> wordAndOneGroup = wordAndOneTuple.groupBy(0);

        //对上面分组后的结果进行组内求和,得到每个word的总count。使用sum()求和时按照group中的索引为1也就是count值进行求和。
        AggregateOperator> wordCountResult = wordAndOneGroup.sum(1);

        //打印最终结果
        wordCountResult.print();
    }
}

运行:

Flink入门WordCount批处理实现_第7张图片

你可能感兴趣的:(大数据之Flink,flink,大数据)