国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Flink之窗口聚合算子

這篇具有很好參考價(jià)值的文章主要介紹了Flink之窗口聚合算子。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.窗口聚合算子

在Flink中窗口聚合算子主要分類兩類

  • 滾動(dòng)聚合算子(增量聚合)
  • 全窗口聚合算子(全量聚合)
1.1 滾動(dòng)聚合算子

滾動(dòng)聚合算子一次只處理一條數(shù)據(jù),通過算子中的累加器對聚合結(jié)果進(jìn)行更新,當(dāng)窗口觸發(fā)時(shí)再從累加器中取結(jié)果數(shù)據(jù),一般使用算子如下:

  • aggregate
  • max
  • maxBy
  • min
  • minBy
  • reduce
  • sum

這里以aggregate算子作為示例

// ... 
// 每10s統(tǒng)計(jì)一次每個(gè)用戶最近30s的行為條數(shù)
SingleOutputStreamOperator<Tuple2<String, Integer>> result = watermarked.keyBy(userEvent -> userEvent.getUId())
        .window(SlidingEventTimeWindows.of(Time.seconds(30), Time.seconds(10))) // 參數(shù)1:窗口長度 參數(shù)2:滑動(dòng)步長即計(jì)算頻率
        .aggregate(new AggregateFunction<UserEvent2, Tuple2<String, Integer>, Tuple2<String, Integer>>() {
            // 這里給一個(gè)初始值
            @Override
            public Tuple2<String, Integer> createAccumulator() {
                return Tuple2.of("", 0);
            }

            // 在累加器中統(tǒng)計(jì)每個(gè)用戶行為條數(shù)(來一條更新一次)
            @Override
            public Tuple2<String, Integer> add(UserEvent2 value, Tuple2<String, Integer> accumulator) {
                Tuple2<String, Integer> result = Tuple2.of(value.getUId() + "-" + value.getName(), accumulator.f1 + 1);
                return result;
            }

            // 將累加器中的更新結(jié)果給到getResult方法,輸出
            @Override
            public Tuple2<String, Integer> getResult(Tuple2<String, Integer> accumulator) {
                return accumulator;
            }

            // 這個(gè)方法在流式計(jì)算中可以不用實(shí)現(xiàn),在上下游數(shù)據(jù)進(jìn)行合并時(shí)需要用到,以spark為例,上有map和下游reduce的計(jì)算結(jié)果需要合并時(shí)需要實(shí)現(xiàn)這個(gè)方法
            @Override
            public Tuple2<String, Integer> merge(Tuple2<String, Integer> a, Tuple2<String, Integer> b) {
                Tuple2<String, Integer> merged = Tuple2.of(a.f0, a.f1 + b.f1);
                return merged;
            }
        });
// ...

只展示部分代碼,冗余代碼已省略.
圖解如下:
Flink之窗口聚合算子,FLink,flink,大數(shù)據(jù)

1.2 全窗口聚合算子

全窗口聚合算子會(huì)將數(shù)據(jù)記錄在狀態(tài)容器中,當(dāng)窗口觸發(fā)時(shí)會(huì)將整個(gè)窗口中的數(shù)據(jù)交給聚合函數(shù),根據(jù)具體邏輯將這些數(shù)據(jù)進(jìn)行計(jì)算,常用算子如下:

  • apply
  • process

這里以apply算子為例

// ... 
// 每10s統(tǒng)計(jì)一次最近30s每個(gè)用戶行為發(fā)生事件最大兩條數(shù)據(jù)
SingleOutputStreamOperator<UserEvent2> userEventTimeTop2 = keyedStream.window(SlidingEventTimeWindows.of(Time.seconds(30), Time.seconds(10)))
               // 泛型1: 數(shù)據(jù)數(shù)據(jù)類型 泛型2: 輸出數(shù)據(jù)類型 泛型3: key類型 泛型4: 窗口類型
               .apply(new WindowFunction<UserEvent2, UserEvent2, String, TimeWindow>() {
                   /**
                    *@Param s 本次傳入的key
                    *@Param window 本次傳入窗口的各種元信息
                    *@Param input 本次輸入的所有數(shù)據(jù)
                    *@Param out 輸出數(shù)據(jù)
                    **/
                   @Override
                   public void apply(String s, TimeWindow window, Iterable<UserEvent2> input, Collector<UserEvent2> out) throws Exception {
                       // 創(chuàng)建集合接收迭代器中的數(shù)據(jù)
                       ArrayList<UserEvent2> userEvent2List = new ArrayList<>();
                       // 遍歷迭代器,也就是輸入數(shù)據(jù)
                       for (UserEvent2 userEvent2 : input) {
                           // 將數(shù)據(jù)添加到集合中
                           userEvent2List.add(userEvent2);
                       }
                       // 將集合中的數(shù)據(jù)根據(jù)用戶行為發(fā)生事件進(jìn)行排序
                       Collections.sort(userEvent2List, new Comparator<UserEvent2>() {
                           @Override
                           public int compare(UserEvent2 o1, UserEvent2 o2) {
                               // 倒序排序
                               return Integer.parseInt(o2.getTime()) - Integer.parseInt(o1.getTime());
                           }
                       });

                       // 將每個(gè)用戶行為發(fā)生時(shí)間最大的兩條數(shù)據(jù)輸出
                       for (int i = 0; i < Math.min(userEvent2List.size(), 2); i++) {
                           out.collect(userEvent2List.get(i));
                       }
                   }
               });
// ...

只展示部分代碼,冗余代碼已省略.
圖解如下:
Flink之窗口聚合算子,FLink,flink,大數(shù)據(jù)文章來源地址http://www.zghlxwxcb.cn/news/detail-724206.html

到了這里,關(guān)于Flink之窗口聚合算子的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Apache Flink】基于時(shí)間和窗口的算子-配置時(shí)間特性

    【Apache Flink】基于時(shí)間和窗口的算子-配置時(shí)間特性

    Apache Flink 它提供了多種類型的時(shí)間和窗口概念,使得用戶能夠進(jìn)行準(zhǔn)確的時(shí)間計(jì)算。在數(shù)據(jù)處理任務(wù)中,時(shí)間的概念是非常重要的,對于一些復(fù)雜的實(shí)時(shí)流處理任務(wù),如事件按時(shí)間順序的聚合、分割和窗口計(jì)算,時(shí)間更是關(guān)鍵所在。而在這類任務(wù)中,選擇使用何種時(shí)間特性是

    2024年02月08日
    瀏覽(16)
  • Flink系列Table API和SQL之:滾動(dòng)窗口、滑動(dòng)窗口、累計(jì)窗口、分組聚合

    Flink系列Table API和SQL之:滾動(dòng)窗口、滑動(dòng)窗口、累計(jì)窗口、分組聚合

    有了時(shí)間屬性,接下來就可以定義窗口進(jìn)行計(jì)算了。窗口可以將無界流切割成大小有限的桶(bucket)來做計(jì)算,通過截取有限數(shù)據(jù)集來處理無限的流數(shù)據(jù)。在DataStream API中提供了對不同類型的窗口進(jìn)行定義和處理的接口,而在Table API和SQL中,類似的功能也都可以實(shí)現(xiàn)。 在Flink 1

    2023年04月27日
    瀏覽(23)
  • Flink學(xué)習(xí)之旅:(三)Flink源算子(數(shù)據(jù)源)

    Flink學(xué)習(xí)之旅:(三)Flink源算子(數(shù)據(jù)源)

    ? ? ? ? Flink可以從各種數(shù)據(jù)源獲取數(shù)據(jù),然后構(gòu)建DataStream 進(jìn)行處理轉(zhuǎn)換。source就是整個(gè)數(shù)據(jù)處理程序的輸入端。 數(shù)據(jù)集合 數(shù)據(jù)文件 Socket數(shù)據(jù) kafka數(shù)據(jù) 自定義Source ? ? ? ? 創(chuàng)建 FlinkSource_List 類,再創(chuàng)建個(gè) Student 類(姓名、年齡、性別三個(gè)屬性就行,反正測試用) 運(yùn)行結(jié)果

    2024年02月06日
    瀏覽(29)
  • Flink 算子:數(shù)據(jù)處理的魔法師

    Flink 算子:數(shù)據(jù)處理的魔法師

    用戶通過算子能將一個(gè)或多個(gè) DataStream 轉(zhuǎn)換成新的 DataStream,在應(yīng)用程序中可以將多個(gè)數(shù)據(jù)轉(zhuǎn)換算子合并成一個(gè)復(fù)雜的數(shù)據(jù)流拓?fù)洹?這部分內(nèi)容將描述 Flink DataStream API 中基本的數(shù)據(jù)轉(zhuǎn)換 API,數(shù)據(jù)轉(zhuǎn)換后各種數(shù)據(jù)分區(qū)方式,以及算子的鏈接策略。 1. Map : 輸入一個(gè)元素同時(shí)輸

    2024年01月22日
    瀏覽(22)
  • 大數(shù)據(jù)學(xué)習(xí)之Flink算子、了解(Transformation)轉(zhuǎn)換算子(基礎(chǔ)篇三)

    目錄 Transformation轉(zhuǎn)換算子(基礎(chǔ)篇三) 三、轉(zhuǎn)換算子(Transformation) 1.基本轉(zhuǎn)換算子 1.1 映射(Map) 1.2 過濾(filter) 1.3 扁平映射(flatmap) 1.4基本轉(zhuǎn)換算子的例子 2.聚合算子(Aggregation) 2.1 按鍵分區(qū)(keyBy) 2.2 簡單聚合 2.3 歸約聚合(reduce) 3.用戶自定義函數(shù)(UDF) 3.1?函

    2024年02月20日
    瀏覽(22)
  • Flink流處理案例:實(shí)時(shí)數(shù)據(jù)聚合

    Apache Flink是一個(gè)流處理框架,可以處理大規(guī)模數(shù)據(jù)流,實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理和分析。Flink支持各種數(shù)據(jù)源和接口,如Kafka、HDFS、TCP流等,可以實(shí)現(xiàn)高吞吐量、低延遲的流處理。 在本文中,我們將通過一個(gè)實(shí)際的Flink流處理案例來講解Flink的核心概念、算法原理和最佳實(shí)踐。我們將

    2024年02月19日
    瀏覽(23)
  • 大數(shù)據(jù)學(xué)習(xí)之Flink算子、了解DataStream API(基礎(chǔ)篇一)

    大數(shù)據(jù)學(xué)習(xí)之Flink算子、了解DataStream API(基礎(chǔ)篇一)

    注: 本文只涉及DataStream 原因:隨著大數(shù)據(jù)和流式計(jì)算需求的增長,處理實(shí)時(shí)數(shù)據(jù)流變得越來越重要。因此,DataStream由于其處理實(shí)時(shí)數(shù)據(jù)流的特性和能力,逐漸替代了DataSet成為了主流的數(shù)據(jù)處理方式。 目錄 DataStream API (基礎(chǔ)篇) 前摘: 一、執(zhí)行環(huán)境 1. 創(chuàng)建執(zhí)行環(huán)境 2. 執(zhí)

    2024年01月23日
    瀏覽(27)
  • 【flink番外篇】2、flink的23種算子window join 和interval join 數(shù)據(jù)傾斜、分區(qū)介紹及詳細(xì)示例(3)- 數(shù)據(jù)傾斜處理、分區(qū)示例

    一、Flink 專欄 Flink 專欄系統(tǒng)介紹某一知識(shí)點(diǎn),并輔以具體的示例進(jìn)行說明。 1、Flink 部署系列 本部分介紹Flink的部署、配置相關(guān)基礎(chǔ)內(nèi)容。 2、Flink基礎(chǔ)系列 本部分介紹Flink 的基礎(chǔ)部分,比如術(shù)語、架構(gòu)、編程模型、編程指南、基本的datastream api用法、四大基石等內(nèi)容。 3、

    2024年02月03日
    瀏覽(34)
  • Flink流數(shù)據(jù)窗口與時(shí)間

    隨著大數(shù)據(jù)時(shí)代的到來,流處理技術(shù)變得越來越重要。流處理系統(tǒng)可以實(shí)時(shí)地處理大量數(shù)據(jù),為實(shí)時(shí)應(yīng)用提供有價(jià)值的信息。Apache Flink是一個(gè)流處理框架,它可以處理大規(guī)模的流數(shù)據(jù),并提供豐富的功能,如窗口操作、時(shí)間操作等。在本文中,我們將深入探討Flink流數(shù)據(jù)窗口

    2024年02月20日
    瀏覽(19)
  • 【flink番外篇】2、flink的23種算子window join 和interval join 數(shù)據(jù)傾斜、分區(qū)介紹及詳細(xì)示例(1)- window join

    一、Flink 專欄 Flink 專欄系統(tǒng)介紹某一知識(shí)點(diǎn),并輔以具體的示例進(jìn)行說明。 1、Flink 部署系列 本部分介紹Flink的部署、配置相關(guān)基礎(chǔ)內(nèi)容。 2、Flink基礎(chǔ)系列 本部分介紹Flink 的基礎(chǔ)部分,比如術(shù)語、架構(gòu)、編程模型、編程指南、基本的datastream api用法、四大基石等內(nèi)容。 3、

    2024年02月03日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包