[英]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.