日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Apache beam其他学习记录

發(fā)布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apache beam其他学习记录 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Combine與GroupByKey

GroupByKey是把相關(guān)key的元素聚合到一起,通常是形成一個Iterable的value,如:

cat, [1,5,9] dog, [5,2] and, [1,2,6]

Combine是對聚合后的Iterable進(jìn)行處理(如求和,求均值),返回一個結(jié)果。內(nèi)置的Combine.perKey()方法其實是GroupByKey和Combine的結(jié)合,先聚合和處理。
Beam中還有許多內(nèi)置的處理類,比如Sum.integersPerKey(),Count.perElement()等
在全局窗口下,對于空輸入,Combine操作后一般會返回默認(rèn)值(比如Sum的默認(rèn)返回值為0),如果設(shè)置了.withoutDefault(),則返回空的PCollection。
在非全局窗口下,用戶必須指明空輸入時的返回類型,如果Combine的輸出結(jié)果要作為下一級處理的輸入,一般設(shè)置為.asSingletonView(),表示返回默認(rèn)值,這樣即使空窗口也有默認(rèn)值返回,保證了窗口的數(shù)量不變;如果設(shè)置了.withoutDefault(),則空的窗口返回空PCollection,一般作為最后的輸出結(jié)果。

Platten與Patition

用于PCollection與PCollectionList的轉(zhuǎn)換。
官方文檔給的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<String> pc1 = ...; PCollection<String> pc2 = ...; PCollection<String> pc3 = ...; PCollectionList<String> collections = PCollectionList.of(pc1).and(pc2).and(pc3);PCollection<String> merged = collections.apply(Flatten.<String>pCollections());

將一個PCollectionList={ PCollection{String1}, PCollection{String2}, PCollection{String3} }轉(zhuǎn)換為一個PCollection={String1, String2, String3}.
而Patition剛好反過來,要將PCollection轉(zhuǎn)換為PCollectionList需要指明分成的list長度以及如何劃分,因此需要傳遞劃分長度size和劃分方法Fn。

// Split students up into 10 partitions, by percentile: PCollectionList<Student> studentsByPercentile =students.apply(Partition.of(10, new PartitionFn<Student>() {public int partitionFor(Student student, int numPartitions) {return student.getPercentile() // 0..99* numPartitions / 100;}}));

其中partitionFor()方法返回的是在PCollectionList中的位置下標(biāo)。

Side Input

不能使用硬編碼數(shù)據(jù),通常是轉(zhuǎn)換中間產(chǎn)生的數(shù)據(jù)。一般用于跟主輸入數(shù)據(jù)進(jìn)行比較,因此要求Side Input數(shù)據(jù)的窗口要與主輸入數(shù)據(jù)的窗口盡量一致,如果不一致,Beam會盡可能地從Side Input中找到合適的位置的數(shù)據(jù)進(jìn)行比較。對于設(shè)置了多個觸發(fā)器的Side Input,自動選擇最后一個觸發(fā)的結(jié)算結(jié)果。

附屬輸出數(shù)據(jù) Additional Outputs

這一部分官方的代碼已經(jīng)寫得很清楚,看代碼即可。

數(shù)據(jù)編碼

在Pipeline的數(shù)據(jù)處理過程中經(jīng)常需要對數(shù)據(jù)元素進(jìn)行字節(jié)轉(zhuǎn)換,因此需要制定字節(jié)轉(zhuǎn)換的編碼格式。對于絕大部分類型的數(shù)據(jù),Beam都提供了默認(rèn)的編碼類型,用戶也可以通過SetCoder指定編碼類型。
1)從內(nèi)存讀取的輸入數(shù)據(jù)一般要求用戶指定其編碼類型;
2)用戶自定義的類對象一般要求用戶指定其編碼類型,或者可以在類定義上使用@DefaultCoder(AvroCoder.class)指定默認(rèn)編碼類型。

其他:

Beam不是線程安全的,一般建議處理方法是冪等的。

總結(jié)

以上是生活随笔為你收集整理的Apache beam其他学习记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。