Operators

DataStream Transformations 数据流转换


DataStream 常规转换

Map

DataStream → DataStream

映射函数,取一个元素,映射产生一个元素。

DataStream<Integer> dataStream = //...
dataStream.map(new MapFunction<Integer, Integer>() {
    @Override
    public Integer map(Integer value) throws Exception {
        return 2 * value;
    }
});

FlatMap

DataStream → DataStream

平面映射,取一个元素,映射产生 0、1 个、或多个元素。

// 字符串分割元素映射为数据流
dataStream.flatMap(new FlatMapFunction<String, String>() {
    @Override
    public void flatMap(String value, Collector<String> out)
        throws Exception {       for(String word: value.split(" ")){
            out.collect(word);
        }
    }
});

Filter

DataStream → DataStream

过滤元素。

// 过滤数据流,保留不为 0 的元素
dataStream.filter(new FilterFunction<Integer>() {
    @Override
    public boolean filter(Integer value) throws Exception {
        return value != 0;
    }
});

Project

DataStream → DataStream

选择 tuples 流中 tuple 元素的子集,仅限于 Java API 使用。

DataStream<Tuple3<Integer, Double, String>> in = // [...]
DataStream<Tuple2<String, Integer>> out = in.project(2,0);

DataStream ←→ KeyedStream 键值流转换

KeyBy

DataStream → KeyedStream

从逻辑上将流划分为不同的分区,具有相同键的所有记录都分配给同一分区;

关于键定位,参考 specify key

以下 2 种元素无法使用:

dataStream.keyBy("someKey") // Key by field "someKey"
dataStream.keyBy(0)         // Key by the first element of a Tuple

Redure

KeyedStream → DataStream

对键分区数据流进行滚动合并,将当前元素与最后一个流元素进行合并操作(如累加操作等)。

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

Aggregations

KeyedStream → DataStream

对键分区数据流进行聚合计算,如:sum、min、max。

keyedStream.sum(0);
keyedStream.sum("key");
keyedStream.min(0);
keyedStream.min("key");
keyedStream.max(0);
keyedStream.max("key");
keyedStream.minBy(0);
keyedStream.minBy("key");
keyedStream.maxBy(0);
keyedStream.maxBy("key");

DataStream ←→ WindowedStream 窗口流转换

Window

KeyedStream → WindowedStream

在已经分区的 KeyedStreams 上定义 Windows。Windows根 据某些特征将每个键中的数据分组(例如,最近5秒钟内到达的数据)。

@see windows

dataStream.keyBy(0)
				.window(TumblingEventTimeWindows.of(Time.seconds(5))); // Last 5 seconds of data

WindowAll

DataStream → AllWindowedStream

同上,直接在整个 DataStream 定义 Windows。

dataStream.windowAll(TumblingEventTimeWindows.of(Time.seconds(5))); // Last 5 seconds of data