DataStream → DataStream
映射函数,取一个元素,映射产生一个元素。
DataStream<Integer> dataStream = //...
dataStream.map(new MapFunction<Integer, Integer>() {
@Override
public Integer map(Integer value) throws Exception {
return 2 * value;
}
});
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);
}
}
});
DataStream → DataStream
过滤元素。
// 过滤数据流,保留不为 0 的元素
dataStream.filter(new FilterFunction<Integer>() {
@Override
public boolean filter(Integer value) throws Exception {
return value != 0;
}
});
DataStream → DataStream
选择 tuples 流中 tuple 元素的子集,仅限于 Java API 使用。
DataStream<Tuple3<Integer, Double, String>> in = // [...]
DataStream<Tuple2<String, Integer>> out = in.project(2,0);
DataStream → KeyedStream
从逻辑上将流划分为不同的分区,具有相同键的所有记录都分配给同一分区;
关于键定位,参考 specify key
以下 2 种元素无法使用:
dataStream.keyBy("someKey") // Key by field "someKey"
dataStream.keyBy(0) // Key by the first element of a Tuple
KeyedStream → DataStream
对键分区数据流进行滚动合并,将当前元素与最后一个流元素进行合并操作(如累加操作等)。
keyedStream.reduce(new ReduceFunction<Integer>() {
@Override
public Integer reduce(Integer value1, Integer value2)
throws Exception {
return value1 + value2;
}
});
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");
KeyedStream → WindowedStream
在已经分区的 KeyedStreams 上定义 Windows。Windows根 据某些特征将每个键中的数据分组(例如,最近5秒钟内到达的数据)。
dataStream.keyBy(0)
.window(TumblingEventTimeWindows.of(Time.seconds(5))); // Last 5 seconds of data
DataStream → AllWindowedStream
同上,直接在整个 DataStream 定义 Windows。
dataStream.windowAll(TumblingEventTimeWindows.of(Time.seconds(5))); // Last 5 seconds of data