aws-glue/spark上的交叉连接优化

gdrx4gfi  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(345)

我有2个Dataframe:
df1-7列(id和varchars),行:1700000
df2-7列(id和varchars),行:25000
需要找到所有可能的相似之处,没有办法跳过笛卡尔积。
aws胶水:10(或20)个g.1x工人的集群
已经测试了178个分区(当从更大的df中过滤df1时,spark是动态计算的)运行时间:10小时。。。我停止了工作!但在s3上,发现了超过999个part--yyyyy文件。
问题:如果没有跳过交叉连接的方法,如何优化glue/spark上的交叉连接?

xfyts7mz

xfyts7mz1#

使用以下方法和胶水配置,作业在121分钟内完成:
粘合细节=>
工人=>g2.x
工人人数=>50。你也可以试试149,这应该在35-45分钟内完成工作。
我创造了两个files:-
df1=>7列行:1700000,大小140 mb(根据列大小,文件大小可能会有所不同)
df2=>7列行:25000,大小2 mb
现在我已经用42500对第一个Dataframe进行了分区。
如何获得42500->首先,我创建了带有1条记录的df1,带有25000条记录的df2,并保存了交叉连接输出。
它是3.5 mb的文件,为了获得最佳性能,最佳分区应该是128MB左右。假设一个分区的大小为150MB。
现在,从1条记录生成的输出是3.5 mb,要使分区大小达到150 mb,每个分区需要大约42条记录。我们有1700000条记录,大约有40500个分区。
对你来说,一张唱片的大小可能不同。使用相同的方法计算分区大小。修复后,只需使用交叉连接和广播。

df1.reparition(40500)

df.crossJoin(broadcast(df2))

相关问题