簡體   English   中英

AWS Glue/Spark 上的交叉聯接優化

[英]Cross join optimizations on AWS Glue/Spark

我有2個數據框:

df1 - 7 列(ID 和 VARCHAR),行:1,700,000

df2 - 7 列(ID 和 VARCHAR),行:25,000

需要找到所有可能的相似之處,沒有辦法跳過笛卡爾積。

AWS Glue:具有 10 個(或 20 個)G.1X Worker 的集群

已經針對 178 個分區進行了測試(當從更大的 df 過濾 df1 時,Spark 會即時計算)運行時間:10 小時......我停止了這項工作,但在 S3 上。 找到超過 999 個 part-XXX-YYYYY 文件。

問題:如果無法跳過交叉連接,如何優化 Glue/Spark 上的交叉連接?

使用以下方法和 Glue 配置,作業在 121 分鍾內完成:

膠水細節=>

工人=>G2.X

工人數量=> 50。您也可以嘗試使用 149,這應該在 35-45 分鍾內完成工作。

我創建了兩個文件:-

df1=> 7 columns rows: 1700000, size 140 MB (根據列大小,文件大小可能會有所不同)

df2=> 7 列行:25000,大小 2 MB

現在我已經將第一個 dataframe 分區為 42500。

我是如何獲得 42500-> 首先我創建了 DF1 和 1 條記錄,DF2 和 25000 並保存,交叉加入 output。

它是 3.5 MB 的文件,為了獲得最佳性能,最佳分區應該在 128 MB 左右。 假設您要將一個分區大小設為 150 MB。

現在從 1 條記錄生成的 output 是 3.5 MB,要制作 150 MB 的分區大小,我們需要大約。 每個分區 42 條記錄。 我們有 1700000 條記錄,這使得它大約。 40500 個分區。

對您來說,1 條記錄的大小可能會有所不同。 使用相同的方法來計算分區大小。 修復后,只需使用帶廣播的交叉連接即可。

df1.reparition(40500)

df.crossJoin(broadcast(df2))

暫無
暫無

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

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