簡體   English   中英

使用 Spark Structured Streaming 對超時傳感器數據進行分組

[英]Grouping sensor data overtime with Spark Structured Streaming

我們有傳感器每天多次啟動和運行隨機持續時間。 來自傳感器的數據被發送到 Kafka 主題並由 Spark 結構化流 API 使用並存儲到 Delta Lake。 現在我們必須識別每個傳感器的會話並將其存儲在不同的 Delta Lake 表中,該表由 device_id 和 sensor_id 分區。

我嘗試使用帶水印的 Spark Structured Streaming,但效果不佳。

stream2 = spark.readStream.format('delta')
             .load('<FIRST_DELTA_LAKE_TABLE>')
             .select('device_id', 'json', 'time')
             .withWatermark('timestamp', '10 minutes')
             .groupBy('device_id').agg(F.min('time').alias('min_time'), F.max('time').alias('max_time')))
             .writeStream
             .format("delta")
stream2.start("<SESSIONS_TABLE>")

這個想法是讓第二個表識別傳入數據的會話並保存每個 session 和設備的開始時間和結束時間。 流作業運行,沒有任何內容寫入會話增量表。

對此的任何幫助將不勝感激。

默認情況下,當您編寫 stream 時,它默認使用append模式(請參閱文檔)。 而在這種模式下,當你使用水印時,數據output只有在水印被越過之后才會出現,所以至少會有10分鍾的延遲,直到你開始看到output中的數據。

但我認為主要問題是您正在運行“全局”聚合,但沒有定義 window 或類似的東西。 通常對於 session 檢測,人們使用flatMapGroupWithState ,如以下博客文章中所述。

暫無
暫無

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

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