国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

結構化數據流-foreachBath操作

IT那活兒 / 443人閱讀
結構化數據流-foreachBath操作

點擊上方“IT那活兒”公眾號,關注后了解更多內容,不管IT什么活兒,干就完了!!!

01

小案例

應用程序中只有調用了start()才能真正開始執行查詢,然后返回StreamingQuery對象,您可以使用該對象來管理查詢。先舉一些例子:

02

foreach和foreachBatch操作

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。


03

DataStreamReader和DataStreamWriter操作

自spark3.1,你也可以使用DataStreamReader.table()讀取表數據作為streaming DataFrame,使用DataStreamWriter.toTable()寫入為表。


END



本文作者:潘宗昊

本文來源:IT那活兒(上海新炬王翦團隊)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129473.html

相關文章

  • 智能合約的一種設計結構

    摘要:所以,在設計時,要了解區塊鏈相關知識,這些是出于安全考慮。通過一個智能合約能夠管理所有模塊,這個是不變的,相當于一個不變的點,用來鏈接各個模塊,保證穩定,相當于在區塊鏈上一直會有一個穩定的地址長期進行服務。 智能合約的設計和傳統的應用設計有點不同。傳統應用一般為了快速迭代是在產品之后考慮安全,但是 DApp 則需要在產品出來之前就考慮安全問題,它將會關系到賬戶資產、用戶數據等問題,而且...

    evin2016 評論0 收藏0
  • 算法學習之數據結構線性表、堆、棧

    摘要:棧底是固定的,而棧頂浮動的如果棧中元素個數為零則被稱為空棧。入棧將數據保存到棧頂。鏈棧鏈棧是指棧的鏈式存儲結構,是沒有附加頭節點的運算受限的單鏈表,棧頂指針是鏈表的頭指針。 一、喜歡單挑線性表 1.線性表的特性 線性表是一個線性結構,它是一個含有n≥0個節點的有限序列。在節點中,有且僅有一個開始節點沒有前驅并有一個后繼節點,有且僅有一個終端節點沒有后繼并有一個前驅節點。其他的節點都有且...

    huaixiaoz 評論0 收藏0
  • 滬江前端由H5頁面引起的一場前端數據結構討論

    摘要:發送請求,處理數據。在上面這個場景中,這類數據的結構可能是最常碰到的。整個過程可以簡化成數據的變化引起視圖的變化,和現在很多前端框架數據驅動思想有幾分相似。至此一個對于頁面的抽象出來的數據結構雛形基本完成了。 作者:周周(滬江資深Web前端開發工程師)本文為原創文章,轉載請注明作者及出處 前言 近期在小D十周年活動之際,又看到了一個自家H5專題夢工廠生成的頁面。 showImg(htt...

    xialong 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<