日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
ApacheBeam是什么,它為什么比其他選擇更受歡迎?

 [[355156]]

10多年的佛山網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整佛山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“佛山網(wǎng)站設(shè)計”,“佛山網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

1. 概述

在本教程中,我們將介紹 Apache Beam 并探討其基本概念。我們將首先演示使用 Apache Beam 的用例和好處,然后介紹基本概念和術(shù)語。之后,我們將通過一個簡單的例子來說明 Apache Beam 的所有重要方面。

2. Apache Beam是個啥?

Apache Beam(Batch+strEAM)是一個用于批處理和流式數(shù)據(jù)處理作業(yè)的統(tǒng)一編程模型。它提供了一個軟件開發(fā)工具包,用于定義和構(gòu)建數(shù)據(jù)處理管道以及執(zhí)行這些管道的運行程序。

Apache Beam旨在提供一個可移植的編程層。事實上,Beam管道運行程序?qū)?shù)據(jù)處理管道轉(zhuǎn)換為與用戶選擇的后端兼容的API。目前,支持這些分布式處理后端有:

  • Apache Apex
  • Apache Flink
  • Apache Gearpump (incubating)
  • Apache Samza
  • Apache Spark
  • Google Cloud Dataflow
  • Hazelcast Jet

3. 為啥選擇 Apache Beam

Apache Beam 將批處理和流式數(shù)據(jù)處理融合在一起,而其他組件通常通過單獨的 API 來實現(xiàn)這一點 。因此,很容易將流式處理更改為批處理,反之亦然,例如,隨著需求的變化。

Apache Beam 提高了可移植性和靈活性。我們關(guān)注的是邏輯,而不是底層的細節(jié)。此外,我們可以隨時更改數(shù)據(jù)處理后端。

Apache Beam 可以使用 Java、Python、Go和 Scala等SDK。事實上,團隊中的每個人都可以使用他們選擇的語言。

4. 基本概念

使用 Apache Beam,我們可以構(gòu)建工作流圖(管道)并執(zhí)行它們。編程模型中的關(guān)鍵概念是:

  • PCollection–表示可以是固定批處理或數(shù)據(jù)流的數(shù)據(jù)集
  • PTransform–一種數(shù)據(jù)處理操作,它接受一個或多個 PCollections 并輸出零個或多個 PCollections。
  • Pipeline–表示 PCollection 和 PTransform 的有向無環(huán)圖,因此封裝了整個數(shù)據(jù)處理作業(yè)。
  • PipelineRunner–在指定的分布式處理后端上執(zhí)行管道。

簡單地說,PipelineRunner 執(zhí)行一個管道,管道由 PCollection 和 PTransform 組成。

5. 字數(shù)統(tǒng)計示例

現(xiàn)在我們已經(jīng)學習了 Apache Beam 的基本概念,讓我們設(shè)計并測試一個單詞計數(shù)任務(wù)。

5.1 建造梁式管道

設(shè)計工作流圖是每個 Apache Beam 作業(yè)的第一步,單詞計數(shù)任務(wù)的步驟定義如下:

  • 1.從原文中讀課文。
  • 2.把課文分成單詞表。
  • 3.所有單詞都小寫。
  • 4.刪去標點符號。
  • 5.過濾停止語。
  • 6.統(tǒng)計唯一單詞數(shù)量。

為了實現(xiàn)這一點,我們需要使用 PCollection 和 PTransform 抽象將上述步驟轉(zhuǎn)換為 管道 。

5.2. 依賴

在實現(xiàn)工作流圖之前,先添加 Apache Beam的依賴項 到我們的項目:

 
 
 
 
  1.  
  2.     org.apache.beam 
  3.     beam-sdks-java-core 
  4.     ${beam.version} 
  5.  

Beam管道運行程序依賴于分布式處理后端來執(zhí)行任務(wù)。我們添加 DirectRunner 作為運行時依賴項:

 
 
 
 
  1.  
  2.     org.apache.beam 
  3.     beam-runners-direct-java 
  4.     ${beam.version} 
  5.     runtime 
  6.  

與其他管道運行程序不同,DirectRunner 不需要任何額外的設(shè)置,這對初學者來說是個不錯的選擇。

5.3. 實現(xiàn)

Apache Beam 使用 Map-Reduce 編程范式 ( 類似 Java Stream)。講下面內(nèi)容之前,最好 對 reduce(), filter(), count(), map(), 和 flatMap() 有個基礎(chǔ)概念和認識。

首先要做的事情就是 創(chuàng)建管道:

 
 
 
 
  1. PipelineOptions options = PipelineOptionsFactory.create(); 
  2. Pipeline p = Pipeline.create(options); 

六步單詞計數(shù)任務(wù):

 
 
 
 
  1. PCollection> wordCount = p 
  2.     .apply("(1) Read all lines",  
  3.       TextIO.read().from(inputFilePath)) 
  4.     .apply("(2) Flatmap to a list of words",  
  5.       FlatMapElements.into(TypeDescriptors.strings()) 
  6.       .via(line -> Arrays.asList(line.split("\\s")))) 
  7.     .apply("(3) Lowercase all",  
  8.       MapElements.into(TypeDescriptors.strings()) 
  9.       .via(word -> word.toLowerCase())) 
  10.     .apply("(4) Trim punctuations",  
  11.       MapElements.into(TypeDescriptors.strings()) 
  12.       .via(word -> trim(word))) 
  13.     .apply("(5) Filter stopwords",  
  14.       Filter.by(word -> !isStopWord(word))) 
  15.     .apply("(6) Count words",  
  16.       Count.perElement()); 

apply() 的第一個(可選)參數(shù)是一個String,它只是為了提高代碼的可讀性。下面是上述代碼中每個 apply() 的作用:

首先,我們使用 TextIO 逐行讀取輸入文本文件。

將每一行按空格分開,把它映射到一個單詞表上。

單詞計數(shù)不區(qū)分大小寫,所以我們將所有單詞都小寫。

之前,我們用空格分隔行,但是像“word!“和”word?"這樣的,就需要刪除標點符號。

像“is”和“by”這樣的停止詞在幾乎每一篇英語文章中都很常見,所以我們將它們刪除。

最后,我們使用內(nèi)置函數(shù) Count.perElement() 計算唯一單詞數(shù)量。

如前所述,管道是在分布式后端處理的。不可能在內(nèi)存中的PCollection上迭代,因為它分布在多個后端。相反,我們將結(jié)果寫入外部數(shù)據(jù)庫或文件。

首先,我們將PCollection轉(zhuǎn)換為String。然后,使用TextIO編寫輸出:

 
 
 
 
  1. wordCount.apply(MapElements.into(TypeDescriptors.strings()) 
  2.     .via(count -> count.getKey() + " --> " + count.getValue())) 
  3.     .apply(TextIO.write().to(outputFilePath)); 

現(xiàn)在管道 已經(jīng)定義好了,接下來做個簡單的測試。

5.4. 運行測試

到目前為止,我們已為單詞計數(shù)任務(wù)定義了管道,現(xiàn)在運行管道:

 
 
 
 
  1. p.run().waitUntilFinish(); 

在這行代碼中,Apache Beam 將把我們的任務(wù)發(fā)送到多個 DirectRunner 實例。因此,最后將生成幾個輸出文件。它們將包含以下內(nèi)容:

 
 
 
 
  1. ... 
  2. apache --> 3 
  3. beam --> 5 
  4. rocks --> 2 
  5. ... 

在 Apache Beam 中定義和運行分布式作業(yè)是如此地簡單。為了進行比較,單詞計數(shù)實現(xiàn)在 Apache Spark, Apache Flink 和 Hazelcast-Jet 上也有

6. 結(jié)語

在本教程中,我們了解了 Apache Beam 是什么,以及它為什么比其他選擇更受歡迎。我們還通過一個單詞計數(shù)示例演示了 Apache Beam 的基本概念。

本文轉(zhuǎn)載自微信公眾號「鍋外的大佬」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系鍋外的大佬公眾號。


網(wǎng)頁標題:ApacheBeam是什么,它為什么比其他選擇更受歡迎?
網(wǎng)頁網(wǎng)址:http://www.dlmjj.cn/article/dppjohp.html