摘要:與用于與的轉換。其中方法返回的是在中的位置下標。對于設置了多個觸發器的,自動選擇最后一個觸發的結算結果。其他不是線程安全的,一般建議處理方法是冪等的。
Combine與GroupByKey
GroupByKey是把相關key的元素聚合到一起,通常是形成一個Iterable的value,如:
</>復制代碼
cat, [1,5,9]
dog, [5,2]
and, [1,2,6]
Combine是對聚合后的Iterable進行處理(如求和,求均值),返回一個結果。內置的Combine.perKey()方法其實是GroupByKey和Combine的結合,先聚合和處理。
Beam中還有許多內置的處理類,比如Sum.integersPerKey(),Count.perElement()等
在全局窗口下,對于空輸入,Combine操作后一般會返回默認值(比如Sum的默認返回值為0),如果設置了.withoutDefault(),則返回空的PCollection。
在非全局窗口下,用戶必須指明空輸入時的返回類型,如果Combine的輸出結果要作為下一級處理的輸入,一般設置為.asSingletonView(),表示返回默認值,這樣即使空窗口也有默認值返回,保證了窗口的數量不變;如果設置了.withoutDefault(),則空的窗口返回空PCollection,一般作為最后的輸出結果。
用于PCollection與PCollectionList的轉換。
官方文檔給的Platten代碼很容易理解:
</>復制代碼
// Flatten takes a PCollectionList of PCollection objects of a given type.
// Returns a single PCollection that contains all of the elements in the PCollection objects in that list.
PCollection pc1 = ...;
PCollection pc2 = ...;
PCollection pc3 = ...;
PCollectionList collections = PCollectionList.of(pc1).and(pc2).and(pc3);
PCollection merged = collections.apply(Flatten.pCollections());
將一個PCollectionList={ PCollection{String1}, PCollection{String2}, PCollection{String3} }轉換為一個PCollection={String1, String2, String3}.
而Patition剛好反過來,要將PCollection轉換為PCollectionList需要指明分成的list長度以及如何劃分,因此需要傳遞劃分長度size和劃分方法Fn。
</>復制代碼
// Split students up into 10 partitions, by percentile:
PCollectionList studentsByPercentile =
students.apply(Partition.of(10, new PartitionFn() {
public int partitionFor(Student student, int numPartitions) {
return student.getPercentile() // 0..99
* numPartitions / 100;
}}));
其中partitionFor()方法返回的是在PCollectionList中的位置下標。
Side Input不能使用硬編碼數據,通常是轉換中間產生的數據。一般用于跟主輸入數據進行比較,因此要求Side Input數據的窗口要與主輸入數據的窗口盡量一致,如果不一致,Beam會盡可能地從Side Input中找到合適的位置的數據進行比較。對于設置了多個觸發器的Side Input,自動選擇最后一個觸發的結算結果。
附屬輸出數據 Additional Outputs這一部分官方的代碼已經寫得很清楚,看代碼即可。
數據編碼在Pipeline的數據處理過程中經常需要對數據元素進行字節轉換,因此需要制定字節轉換的編碼格式。對于絕大部分類型的數據,Beam都提供了默認的編碼類型,用戶也可以通過SetCoder指定編碼類型。
1)從內存讀取的輸入數據一般要求用戶指定其編碼類型;
2)用戶自定義的類對象一般要求用戶指定其編碼類型,或者可以在類定義上使用@DefaultCoder(AvroCoder.class)指定默認編碼類型。
Beam不是線程安全的,一般建議處理方法是冪等的。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67678.html
摘要:最近在用做流上的異常檢測,期間遇到了很多問題,但是發現網上相關的資料很少,基本只能自己啃文檔和瞎嘗試。其中如有錯漏,歡迎指出。即從一條數據中獲得時間戳,然后以的格式返回。丟棄掉中的附加信息使用這一設置時,得到的中的元素是的和組成的鍵值對。 最近在用Apache beam做流上的異常檢測,期間遇到了很多問題,但是發現網上相關的資料很少,基本只能自己啃文檔和瞎嘗試。所以想把自己踩過的坑記錄...
摘要:要說在中常見的函數是哪一個,當然是。是一個實現了接口的抽象類,其中是數據處理方法,強制子類必須實現。以上為學習一天的總結,有錯誤歡迎指正。相同的是這個方法處理的都是中的一個元素。 在閱讀本文前,可先看一下官方的WordCount代碼, 對Apache Beam有大概的了解。 要說在Apache Beam中常見的函數是哪一個,當然是apply()。常見的寫法如下: [Final Outp...
摘要:需要注意的是和方法生成的觸發器是連續的而不是一次性的。其他的還有一次性觸發器將一次性觸發器變為連續型觸發器,觸發后再次等待觸發。例如與一起用可以實現每個數據到達后的分鐘進行處理,經常用于全局窗口,可以用觸發器來設置停止條件。 本文參考Apache Beam官方編程手冊 可以結合官方的Mobile Game 代碼閱讀本文。 在默認情況下,Apache Beam是不分窗的,也就是采用Gl...
摘要:一直接訪問引入的相關包使用代替給指定配置與訪問本地文件一樣訪問文件實際測試中發現本地如能夠成功讀寫,但是集群模式下如讀寫失敗,原因未知。二通過訪問除了直接讀寫的數據,還可以通過來進行讀寫。 一、直接訪問 1.引入HDFS的相關jar包: org.apache.beam beam-sdks-java-io-hadoop-file-system 2.1.0...
摘要:主頁暫時下線社區暫時下線知識庫自媒體平臺微博知乎簡書博客園我們不是的官方組織機構團體,只是技術棧以及的愛好者合作侵權,請聯系請抄送一份到基礎編程思想和大數據中文文檔中文文檔中文文檔中文文檔中文文檔中文文檔中文文檔中文文檔中文文檔中文文檔區塊 【主頁】 apachecn.org 【Github】@ApacheCN 暫時下線: 社區 暫時下線: cwiki 知識庫 自媒體平臺 ...
閱讀 1983·2023-04-25 15:45
閱讀 1220·2021-09-29 09:34
閱讀 2509·2021-09-03 10:30
閱讀 2015·2019-08-30 15:56
閱讀 1470·2019-08-29 15:31
閱讀 1277·2019-08-29 15:29
閱讀 3207·2019-08-29 11:24
閱讀 3065·2019-08-26 13:45