簡體   English   中英

Apache Flink中的Join輸出

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

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