Flinkの基本的な演算子map、keyBy、sum、reduce

コアコード:

オブジェクトTransformTest { 

  def main(args:Array [String]):Unit = { 
    val env = StreamExecutionEnvironment.getExecutionEnvironment 
    env.setParallelism(1)

    val streamFromFile = env.readTextFile( "C:\\ Users \\ Mi \\ Documents \\ project \\ idea \\ FlinkTitorial \\ src \\ main \\ resources \\ sensor.txt ")

    // ------------ map ------------ - 
    ヴァルdataStream1:でDataStream [SensorReading] = streamFromFile.map(D => { 
      ヴァルARR = d.split( "")
      SensorReading(ARR(0).trim、ARR(1).trim.toLong、ARR(2 ).toDouble)
    })

    // ------------ keyBY -------------- 
    // This时key是一个元组 
    val dataStream2:KeyedStream [SensorReading 、タプル] = dataStream1.keyBy(0)
    val dataStream3:KeyedStream [SensorReading 、Tuple] = dataStream1.keyBy( "id")
    //ここ時刻key是字段的类型
    val dataStream4:KeyedStream [SensorReading、String] = dataStream1.keyBy(_。id)

    // ------------ sum -------------- 
    val dataStream5 = dataStream4.sum(2)
    val dataStream6 = dataStream4.sum( "temperature")

    // ------------ reduce ----------- 
    //温度の合計。sr1は最後の結果、sr2はトラバースされた現在のSensorReadingオブジェクトです
    val dataStream7 = dataStream4.reduce((sr1、sr2)=> SensorReading(sr2.id、sr2.timestamp、sr1.temperature + sr2.temperature))

    dataStream7 .print 

    env.execute( "transform test")
  } 

} 

ケースクラスSensorReading(ID:文字列、タイムスタンプ:長い、温度:ダブル)

sensor.txtファイルの内容:

sensor_1、1547718199、35.80018327300259 
sensor_6、1547718201、15.402984393403084 
sensor_7、1547718202、6.720945201171228 
sensor_10、1547718205、38.101067604893444 
sensor_1、1547718200、30.8 
sensor_1、1547718201、40.8

出力結果:

SensorReading(sensor_1,1547718199,35.80018327300259)
SensorReading(sensor_6,1547718201,15.402984393403084)
SensorReading(sensor_7,1547718202,6.720945201171228)
SensorReading(sensor_10,1547718205,38.101067604893444)
SensorReading(sensor_1,1547718200,66.60018327300259)
SensorReading(sensor_1,1547718201,107.40018327300258)

  

おすすめ

転載: www.cnblogs.com/noyouth/p/12735072.html