Flink(五)转换算子

1.flatMap 数据扁平化操作

    val data: DataSet[String] = env.readTextFile(inputPath)
    //3.对数据进行切分及其处理
    val value: DataSet[String] = data.flatMap( ( _.split(",")) )

2.map 改变其数据结构

    //3.对数据进行切分及其处理
    val value: DataSet[(String, String)] = data.map(
      d => {
        val strings: Array[String] = d.split(",")
        (strings(0), strings(3))
      }
    )

3.filter 过滤数据

val streamFilter = stream.filter{ x => x == 1}

4.keyby 根据key进行分区(DataStream  KeyedStream:逻辑地将一个流拆分成不相交的分区,每个分区包含具有相同 key 的元素,在内部以 hash 的形式实现的)

    //处理数据
    val sensor: DataStream[SensorReading] = sensorData.map(
      data => {
        val dataStr = data.split(",")
        SensorReading(dataStr(0).trim, dataStr(1).trim.toLong, dataStr(2).trim.toDouble)
      }
    )
     .keyBy("id")

5.reduce 对数据进行聚合

//KeyedStream → DataStream:一个分组数据流的聚合操作,合并当前的元素和上次聚合的结果,产//生一个新的值,返回的流中包含每一次聚合的结果,而不是只返回最后一次聚合的最终结果。
    val sensor: DataStream[SensorReading] = sensorData.map(
      data => {
        val dataStr = data.split(",")
        SensorReading(dataStr(0).trim, dataStr(1).trim.toLong, dataStr(2).trim.toDouble)
      }
    )
        .keyBy("id")
//        .sum(2)
        .reduce((x , y) => SensorReading(x.id,x.timestamp+10,x.temprature+1))

6.sum()

    val sensor: DataStream[SensorReading] = sensorData.map(
      data => {
        val dataStr = data.split(",")
        SensorReading(dataStr(0).trim, dataStr(1).trim.toLong, dataStr(2).trim.toDouble)
      }
    )
        .keyBy("id")
        .sum(2)
        

7.Split

DataStream  → SplitStream:根据某些特征把一个 DataStream 拆分成两个或者多个 DataStream。

8.Select

 

SplitStream→ DataStream:从一个 SplitStream 中获取一个或者多个 DataStream。
val splitStream = stream2

.split( sensorData => {

if (sensorData.temperature > 30) Seq("high") else Seq("low")

} )

val high = splitStream.select("high") val low = splitStream.select("low")

val all = splitStream.select("high", "low")

猜你喜欢

转载自blog.csdn.net/weixin_43233971/article/details/107451549