簡體   English   中英

在Apache Flink中依次處理兩個數據源

[英]Process two data sources successively in Apache Flink

我想使用Apache Flink批處理兩個文件,一個接一個。

舉一個具體的例子:假設我想為每行分配一個索引,以使第二個文件中的行緊跟第一個文件。 而不是這樣做,下面的代碼交錯了兩個文件中的行:

val env = ExecutionEnvironment.getExecutionEnvironment

val text1 = env.readTextFile("/path/to/file1")
val text2 = env.readTextFile("/path/to/file2")

val union = text1.union(text2).flatMap { ... }

我想確保所有text1首先通過flatMap運算符發送, 然后再通過text2 推薦的做法是什么?

先謝謝您的幫助。

DataSet.union()不提供跨輸入的任何順序保證。 來自相同輸入分區的記錄將保持順序,但將與來自其他輸入的記錄合並。

但是,還有一個更根本的問題。 Flink是並行數據處理器。 並行處理數據時,無法保留全局順序。 例如,當Flink並行讀取文件時,它將嘗試拆分這些文件並獨立處理每個拆分。 拆分沒有任何特定順序地分發。 因此,單個文件的記錄已經被改組。 您需要將整個作業的並行度設置為1,並實現自定義InputFormat才能使此工作InputFormat

您可以進行這項工作,但不會並行進行,您需要進行很多調整。 我不認為Flink是執行此任務的最佳工具。 您是否考慮過使用簡單的unix命令行工具來串聯文件?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM