- Flink原理深入與編程實戰(zhàn):Scala+Java(微課視頻版)
- 辛立偉編著
- 637字
- 2023-07-17 18:54:43
3.2.2 基于文件的數(shù)據(jù)源
還可以選擇使用基于文件的源函數(shù)從文件源中傳輸數(shù)據(jù)。從文件源讀取數(shù)據(jù)的源函數(shù)定義有多個,包括:
(1)readTextFile(Stringpath):逐行讀取路徑指定的文本文件,即符合TextInputFormat規(guī)范的文本文件,并以字符串的形式返回。
(2)readFile(FileInputFormat inputFormat,String path):根據(jù)指定的文件輸入格式讀?。ㄒ淮危┪募?。
(3)readFile(fileInputFormat,path,watchType,interval,pathFilter):這是前兩種方法在內(nèi)部調(diào)用的方法。它根據(jù)給定的fileInputFormat讀取路徑中的文件。根據(jù)所提供的watchType,此源可以定期(FileProcessingMode.PROCESS_CONTINUOUSLY,每隔interval毫秒)監(jiān)視新數(shù)據(jù)的路徑,或處理一次(FileProcessingMode.PROCESS_ONCE)當前路徑中的數(shù)據(jù)并退出。使用pathFilter進一步排除正在處理的文件。
對于第3種方法,在底層,F(xiàn)link將文件讀取過程分成兩個子任務,即目錄監(jiān)視和數(shù)據(jù)讀取。每個子任務都由一個單獨的實體實現(xiàn)。監(jiān)視文件路徑的子任務是由單個非并行(并行度=1)任務實現(xiàn)的,而文件讀取則由多個并行運行的任務執(zhí)行,并行度等于作業(yè)并行度。單個監(jiān)視任務的作用是掃描目錄(定期或僅掃描一次,這取決于watchType),查找要處理的文件,將它們劃分為分段,并將這些分段分配給下游的讀取器,如圖3-4所示。

圖3-4 文件數(shù)據(jù)源
讀取器將讀取實際數(shù)據(jù)。每個分段只由一個讀取器讀取,而一個讀取器可以逐個讀取多個分段。
【示例3-3】 編寫Flink流應用程序,讀取文件,并實時統(tǒng)計文件內(nèi)的單詞數(shù)量。
建議按以下步驟實現(xiàn):
(1)在IDEA中創(chuàng)建Flink項目。
(2)在項目的src上右擊,創(chuàng)建一個名為wc.txt的文本文件,如圖3-5所示。

圖3-5 創(chuàng)建數(shù)據(jù)源文件wc.txt
(3)編輯wc.txt文件,輸入以下內(nèi)容并保存:

(4)流處理代碼實現(xiàn)。
Scala代碼如下:

Java代碼如下:

執(zhí)行以上程序,輸出的結(jié)果如下:

- OpenStack Cloud Computing Cookbook(Third Edition)
- 程序員面試筆試寶典
- AWS Serverless架構(gòu):使用AWS從傳統(tǒng)部署方式向Serverless架構(gòu)遷移
- Hands-On Data Structures and Algorithms with JavaScript
- Linux網(wǎng)絡程序設計:基于龍芯平臺
- 人臉識別原理及算法:動態(tài)人臉識別系統(tǒng)研究
- Functional Programming in JavaScript
- Android 應用案例開發(fā)大全(第3版)
- FFmpeg入門詳解:音視頻原理及應用
- PLC編程與調(diào)試技術(shù)(松下系列)
- 自制編程語言
- Learning Vaadin 7(Second Edition)
- 運用后端技術(shù)處理業(yè)務邏輯(藍橋杯軟件大賽培訓教材-Java方向)
- Lighttpd源碼分析
- Learning YARN