簡體   English   中英

apache flink:如何解釋DataStream.print輸出?

[英]apache flink: how to interpret DataStream.print output?

我是Flink的新手,試圖了解如何最有效地使用它。

我正在嘗試使用Window API,從CSV文件讀取。 讀取的行將轉換為案例類,因此

case class IncomingDataUnit (
sensorUUID: String, radiationLevel: Int,photoSensor: Float,
humidity: Float,timeStamp: Long, ambientTemperature: Float)
  extends Serializable {

}

並且,這就是我讀取行的方式:

env.readTextFile(inputPath).map(datum => {
      val fields = datum.split(",")
      IncomingDataUnit(
        fields(0),              // sensorUUID
        fields(1).toInt,        // radiationLevel
        fields(2).toFloat,      // photoSensor
        fields(3).toFloat,      // humidity
        fields(4).toLong,       // timeStamp
        fields(5).toFloat       // ambientTemperature
      )
    })

稍后,我使用一個簡單的窗口嘗試打印最高環境溫度 ,因此:

env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime)

val readings =
      readIncomingReadings(env,"./sampleIOTTiny.csv")
      .map(e => (e.sensorUUID,e.ambientTemperature))
      .timeWindowAll(Time.of(5,TimeUnit.MILLISECONDS))
      .trigger(CountTrigger.of(5))
      .evictor(CountEvictor.of(4))
      .max(1)

readings.print

輸出包含以下內容(來自一堆DEBUG日志語句):

1> (probe-987f2cb6,29.43)
1> (probe-987f2cb6,29.43)
3> (probe-dccefede,30.02)
3> (probe-42a9ddca,22.07)
2> (probe-df2d4cad,22.87)
2> (probe-20c609fb,27.62)
4> (probe-dccefede,30.02)

我想了解的是,這是如何解釋的? 重復的1>代表什么?

還令我感到困惑的是, 探針987f2cb6與我的數據集中的環境溫度 29.43不對應。 它對應於一個不同的值(准確地說是14.72)。

僅供參考,以下是數據集:

probe-f076c2b0,201,842.53,75.5372,1448028160,29.37
probe-dccefede,199,749.25,78.6057,1448028160,27.46
probe-f29f9662,199,821.81,81.7831,1448028160,22.35
probe-5dac1d9f,195,870.71,83.1028,1448028160,15.98
probe-6c75cfbe,198,830.06,82.5607,1448028160,30.02
probe-4d78b545,204,778.42,78.412,1448028160,25.92
probe-400c5cdf,204,711.65,73.585,1448028160,22.18
probe-df2d4cad,199,820.8,72.936,1448028161,16.18
probe-f4ef109e,199,785.68,77.5647,1448028161,16.36
probe-3fac3350,200,720.12,78.2073,1448028161,19.19
probe-42a9ddca,193,819.12,74.3712,1448028161,22.07
probe-252a5bbd,197,710.32,80.6072,1448028161,14.64
probe-987f2cb6,200,750.4,76.0533,1448028161,14.72
probe-24444323,197,816.06,84.0816,1448028161,4.405
probe-6dd6fdc4,201,717.64,78.4031,1448028161,29.43
probe-20c609fb,204,804.37,84.5243,1448028161,22.87
probe-c027fdc9,195,858.61,81.7682,1448028161,24.47
probe-2c6cd3de,198,826.96,85.26,1448028162,18.99
probe-960906ca,197,797.63,77.4359,1448028162,27.62

我可能想念的很多東西。 請刺我。

忘了提及:我正在使用Flink 0.10.0。

“> X”表示確實打印結果元組的並行任務的任務ID。 我只是想知道為什么輸出顯示1到4的值-因為您使用的是非並行窗口(數據流未通過.keyBy()分區),並且我希望打印是鏈接的且不是並行的。 但也許不是,並且有4個並行打印任務正在運行。

關於結果的信息:如果窗口觸發,則在所有元組上計算字段1的最大值,並且該字段的元組的值用於字段0。如果要返回包含最大值的完整元組,則可以使用maxBy()而不是max()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM