[英]Two big files join as one to many relationship in Java Spark
我有兩個大文件
為簡單起見說
email file is having:
eId emailcontent
e1 xxxxxxxx
e2 yyyyyyyy
e3 zzzzzzzz
attachment file is having:
aid attachmentcontent eid
a1 att1 e1
a2 att2 e1
a3 att3 e2
a4 att4 e3
a5 att5 e3
a6 att6 e3
注意:廣播變量連接已經使用 email 文件和其他一些小文件執行。 這兩個文件都足夠大,廣播變量不能再次使用。
我想使用帶有eid
作為連接列的JavaPairRDD
連接這兩個文件,但不能使用eid
制作 pairRDD,因為使用相同的eid
密鑰鏈接了多個附件。
試圖將JavaRDD<Email>
和JavaRDD<Attachment>
轉換為 Dataset 並執行連接操作,但 Email class 是復雜類(它包含多個類作為變量列表),因此轉換為 Dataset 不會返回其中的任何記錄。
以上兩種方法都沒有解決我的問題。 因此,如果我遺漏了什么,請尋找此處或上述場景中未考慮的任何解決方案。
使用JavaPairRDD
解決了上述問題。
對於 email 文件創建JavaPairRDD<eId, Email>
因為eId
對於每個 email 和附件文件創建JavaPairRDD<eId, Iterator<Attachment>>
因為eId
具有多個附件。
然后為 email 創建 JavaPairRDD: JavaPairRDD<eId, Email> rddEmail = emailRdd.mapToPair(record -> new Tuple2<>(eId, email));
和用於附件的 JavaPairRDD: JavaPairRDD<eId, Iterator<Attachment>> rddAttachment = attachmentRdd.mapToPair(record -> new Tuple2<>(eId, attachment)).groupByKey();
最后按照要求執行了rddEmail.join(rddAttachment)
等邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.