點擊上方“IT那活兒”公眾號,關注后了解更多內容,不管IT什么活兒,干就完了!!!
應用程序中只有調用了start()才能真正開始執行查詢,然后返回StreamingQuery對象,您可以使用該對象來管理查詢。先舉一些例子:
foreach和foreachBatch操作允許您對流式查詢的輸出應用任意操作和寫入邏輯。它們的用例稍有不同——foreach允許在每一行上自定義寫入邏輯,而foreachBatch允許在每個微批的輸出上執行任意操作和自定義邏輯。讓我們更詳細地了解它們的用法。
2.1 foreachBatch
foreachBach允許你對流式查詢的每個微批的輸出數據指定執行的函數,自spark2.4,scala,java,python都支持這一點,他有兩個參數,微批數據集和微批的唯一ID。
使用foreachBatch可以做以下工作:
重用批處理數據源-對于許多存儲系統,可能還沒有可用的流式接收器,但可能已經存在批處理查詢的接收器,所以使用foreachBatch可以再每個微批次輸出中使用批接收器。
寫入多個存儲器:可能你需要將流式查詢的輸出寫入到多個位置,則只需多次寫入即可,但是這樣可能導致重新計算(包括可能重新讀取數據)。為了避免重新計算,應該緩存數據集,將其寫入多個存儲器后再取消緩存,例如:
批處理中的許多操作在流式查詢中不支持,因為spark不支持在這些情況下生成增量計劃,使用foreachBatch可以將流式查詢轉換成了一個個微批來處理,但是你必須自己考慮執行這些操作端到端語義。
注意:
默認情況下foreachBatch只提供至少一次寫入保證,但是你可以使用batchID作為消除重復的方法,并獲得一次寫入保證。
foreachBatch不適用于連續處理模式,因為他基本上依賴于微批處理,如果以連續模式寫入數據,可以使用foreach。
2.2 foreach
如果不存在相應的批處理數據接收器,或者不存在連續處理模式,則可以使用foreach來自定義編寫器邏輯,你可以將數據寫入邏輯分為三個方法,open,process和close。
自spark2.4 scala,java,python都支持這一點。
流查詢啟動后,spark按以下方式調用函數或對象的方法:
此對象的一個副本負責查詢中單個任務生成的所有數據,也就是說,一個實例負責處理以分布式方式生成的數據的一個分區。
此對象必須是可序列化的,因為每個任務將獲取此對象的副本,需要進行反序列化,強烈建議任何初始化一定在調用open()方法之后完成,意味著已經準備好了數據。
這些方法的生命周期如下:對于每個分區(包含partition_id),每個微批(包含epoch_id)。
open(partitionId, epochId)方法被調用,如果open()方法返回true,則對于分區和微批中的每一行將調用process(),然后調用close(error),在處理時拋出錯誤(如果有)。
close()方法被調用(如果有)如果open()方法被調用并返回成功(不管返回true還是false),除非JVM或python進程崩潰。
spark不保證輸出相同,因此無法使用(partitionId, epochId)實現重復數據消除,如果需要對輸出執行重復數據消除,請嘗試使用foreachBatch。
自spark3.1,你也可以使用DataStreamReader.table()讀取表數據作為streaming DataFrame,使用DataStreamWriter.toTable()寫入為表。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129473.html
摘要:所以,在設計時,要了解區塊鏈相關知識,這些是出于安全考慮。通過一個智能合約能夠管理所有模塊,這個是不變的,相當于一個不變的點,用來鏈接各個模塊,保證穩定,相當于在區塊鏈上一直會有一個穩定的地址長期進行服務。 智能合約的設計和傳統的應用設計有點不同。傳統應用一般為了快速迭代是在產品之后考慮安全,但是 DApp 則需要在產品出來之前就考慮安全問題,它將會關系到賬戶資產、用戶數據等問題,而且...
摘要:棧底是固定的,而棧頂浮動的如果棧中元素個數為零則被稱為空棧。入棧將數據保存到棧頂。鏈棧鏈棧是指棧的鏈式存儲結構,是沒有附加頭節點的運算受限的單鏈表,棧頂指針是鏈表的頭指針。 一、喜歡單挑線性表 1.線性表的特性 線性表是一個線性結構,它是一個含有n≥0個節點的有限序列。在節點中,有且僅有一個開始節點沒有前驅并有一個后繼節點,有且僅有一個終端節點沒有后繼并有一個前驅節點。其他的節點都有且...
摘要:發送請求,處理數據。在上面這個場景中,這類數據的結構可能是最常碰到的。整個過程可以簡化成數據的變化引起視圖的變化,和現在很多前端框架數據驅動思想有幾分相似。至此一個對于頁面的抽象出來的數據結構雛形基本完成了。 作者:周周(滬江資深Web前端開發工程師)本文為原創文章,轉載請注明作者及出處 前言 近期在小D十周年活動之際,又看到了一個自家H5專題夢工廠生成的頁面。 showImg(htt...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20