Flink 学习笔记三

2017/06/25 Flink

Flink2 学习笔记三

Transformation

数据转换是数据流之间的处理关系,描述了数据如何从一个流传输到另一个流的的过程。输入的数据可以是一个或者多个流,输出的数据也可以是一个或者多个流。

Map

输入一个数据,输出一个数据。 在Java中:

inputStream.map(new MapFunction<Integer,Integer>(){
    @Override
    public Integer map(Integer value) throws Exception{
        return 5*value;
    }
});

在Scala中:

inputStream.map{ x => x*5 }

FlatMap

输入一个数据,输出零个,一个或者多个数据。 在Java中:

inputStream.flatMap(new FlatMapFunction<String,String>(){
    @Override
    public void flatMap(String value,Collector<String> out){
        for(String word:value.split(" ")){
            out.collect(word);
        }
    }
})

在Scala中:

inputStream.flatMap{ str=>str.split(" ") }

Filter

过滤函数只输出条件为真的数据, 在Java中:

inputStream.filter(new FilterFunction<Integer>(){
    @Override
    public boolean filter(Integer value) throws Exception{
        return value != 1;
    }
});

在Scala中:

inputStream.filter{ _!=1 }

KeyBy

从逻辑上将数据流分区,根据Key来做逻辑分区,内部使用Hash Function函数处理。返回KeyedDataStream。 在Java中:

inputStream.keyBy("someKey")

在Scala中:

inputStream.keyBy("someKey")

Reduce

Reduce操作将上一个reduced数据和当前数据作为输出的KeyedDataStream 在Java中:

keyedInputStream.reduce(new ReduceFunction<Integer>{
    @Override
    public Integer reduce(Integer value1,Integet value2){
        return value1+value2;
    }
})

在Scala中:

keyedInputStream.reduce{_+_}

Fold

输出KeyedDataStream数据,通过把上次Fold的数据和当前数据再次做fold操作。 在Java中:

keyedInputStream.fold("start",new FoldFunction<Integer,String>(){
    @Override
    public String fold(String current,Integer value){
        return current+"="+value;
    }
})

在Scala中:

keyedInputStream.fole("start")((str,i)=>{str+"="+i})

输入数据如果是(1,2,3,4,5),则上述代码的输出是Start=1=2=3=4=5

Show Disqus Comments

Search

    Table of Contents