![](/img/trans.png)
[英]Apache Flink output to csv file for each GroupedDataSet
[英]Output of Join in Apache Flink
在Apache Flink中,如果我在一個主鍵上連接兩個數據集,我會得到一個元組2,其中包含每個數據集的相應數據集條目。
問題是,當將map()
方法應用於輸出的元組2數據集時,它看起來並不好看,特別是如果兩個數據集的條目都具有大量特征。
在兩個輸入數據集中使用元組得到一些像這樣的代碼:
var in1: DataSet[(Int, Int, Int, Int, Int)] = /* */
var in2: DataSet[(Int, Int, Int, Int)] = /* */
val out = in1.join(in2).where(0, 1, 2).equalTo(0, 1, 2)
.map(join => (join._1._1, join._1._2, join._1._3,
join._1._4, join._1._5, join._2._4))
我不介意使用POJO或案例類,但我不知道這會如何使它變得更好。
問題1:有沒有一種很好的方法來展現元組2? 例如使用其他運營商。
問題2:如何在同一個鍵上處理3個數據集的連接? 這將使示例源更加混亂。
謝謝你的幫助。
您可以直接在每對連接元素上應用連接函數,例如
val leftData: DataSet[(String, Int, Int)] = ...
val rightData: DataSet[(String, Int)] = ...
val joined: DataSet[(String, Int, Int)] = leftData
.join(rightData).where(0).equalTo(0) { (l, r) => (l._1, l._2, l._3 + r._2) ) }
要回答第二個問題,Flink只處理二進制連接。 但是,如果您提示函數的行為,Flink的優化器可以避免進行不必要的改組。 轉發字段注釋告訴優化器,某些字段(例如連接鍵)未被連接函數修改,並允許重用現有的分區和排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.