コアコード:
オブジェクト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)