繁体   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