Amazon web services AWS Glue/Spark上的交叉连接优化

Amazon web services AWS Glue/Spark上的交叉连接优化,amazon-web-services,apache-spark,optimization,cross-join,Amazon Web Services,Apache Spark,Optimization,Cross Join,我有两个数据帧: df1-7列(ID和VARCHAR),行数:1700000 df2-7列(ID和VARCHAR),行数:25000 需要找到所有可能的相似之处,没有办法跳过笛卡尔积 AWS胶水:10(或20)个G.1X工人的集群 已经对178个分区进行了测试(从较大的df中过滤df1时动态计算火花) 运行时间:10小时。。。我停止了工作! 但在S3上,找到了999多个part-XXX-yyyy文件 问题:如果无法跳过交叉连接,如何优化胶水/火花上的交叉连接?使用以下方法和胶水配置,作业在121

我有两个数据帧:

df1-7列(ID和VARCHAR),行数:1700000

df2-7列(ID和VARCHAR),行数:25000

需要找到所有可能的相似之处,没有办法跳过笛卡尔积

AWS胶水:10(或20)个G.1X工人的集群

已经对178个分区进行了测试(从较大的df中过滤df1时动态计算火花) 运行时间:10小时。。。我停止了工作! 但在S3上,找到了999多个part-XXX-yyyy文件


问题:如果无法跳过交叉连接,如何优化胶水/火花上的交叉连接?

使用以下方法和胶水配置,作业在121分钟内完成:

粘合细节=>

工人=>G2.X

工人人数=>50人。您也可以尝试149,这将在35-45分钟内完成工作

我创建了两个文件:-

df1=>7列行:1700000,大小140MB(根据列大小,文件大小可能会有所不同)

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

现在我已经用42500对第一个数据帧进行了分区

如何获得42500->首先,我创建了带有1条记录的DF1,带有25000条记录的DF2,以及保存的交叉连接输出

它是3.5MB文件,为了获得最佳性能,最佳分区应该是128MB左右。 假设您希望将一个分区大小设置为150MB

现在,从1条记录生成的输出是3.5MB,使分区大小达到150MB 我们需要每个分区大约42条记录。 我们有1700000条记录,大约有40500个分区

对于您来说,1条记录的大小可能会有所不同。使用相同的方法计算分区大小。 修复后,只需使用交叉连接和广播

df1.reparition(40500)

df.crossJoin(broadcast(df2))

通过以下方法和胶水配置,作业在121分钟内完成:

粘合细节=>

工人=>G2.X

工人人数=>50人。您也可以尝试149,这将在35-45分钟内完成工作

我创建了两个文件:-

df1=>7列行:1700000,大小140MB(根据列大小,文件大小可能会有所不同)

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

现在我已经用42500对第一个数据帧进行了分区

如何获得42500->首先,我创建了带有1条记录的DF1,带有25000条记录的DF2,以及保存的交叉连接输出

它是3.5MB文件,为了获得最佳性能,最佳分区应该是128MB左右。 假设您希望将一个分区大小设置为150MB

现在,从1条记录生成的输出是3.5MB,使分区大小达到150MB 我们需要每个分区大约42条记录。 我们有1700000条记录,大约有40500个分区

对于您来说,1条记录的大小可能会有所不同。使用相同的方法计算分区大小。 修复后,只需使用交叉连接和广播

df1.reparition(40500)

df.crossJoin(broadcast(df2))

你试过广播吗?如果由于内存问题导致广播失败,请尝试使用G2X工作类型。我已经尝试过了。同样的事情实际上是+/-。最好估计一下,这个作业应该在指定的集群大小下运行多长时间(小时)?有什么办法吗?你试过广播吗?如果由于内存问题导致广播失败,请尝试使用G2X工作类型。我已经尝试过了。同样的事情实际上是+/-。最好估计一下,这个作业应该在指定的集群大小下运行多长时间(小时)?有什么办法吗?嗯。。。因此,您在您的一侧进行了测试,您在121分钟内得到了结果(50 T2.X工人~100 dpu)。您应该付费:$0.44*(121/10分钟)*(100 DPU)=$0.44*12*100=$528听起来对吗?或者您应该付费:$0.44*2(小时)*(100 DPU)=$0.44*2*100=$88抱歉,我没有访问计费矩阵的权限。理想情况下应该是88美元,我已经在客户帐户上测试过了,按照他们的说法,“与标准定价相比,我们的价格非常低”。谢谢!Spark作业的执行时间估计如何?没有(之前)运行作业来估计/计算大约。没有这样的方法来估计执行时间。我唯一能想到的方法是,使用以前的统计数据并估计它。嗯。。。因此,您在您的一侧进行了测试,您在121分钟内得到了结果(50 T2.X工人~100 dpu)。您应该付费:$0.44*(121/10分钟)*(100 DPU)=$0.44*12*100=$528听起来对吗?或者您应该付费:$0.44*2(小时)*(100 DPU)=$0.44*2*100=$88抱歉,我没有访问计费矩阵的权限。理想情况下应该是88美元,我已经在客户帐户上测试过了,按照他们的说法,“与标准定价相比,我们的价格非常低”。谢谢!Spark作业的执行时间估计如何?没有(之前)运行作业来估计/计算大约。没有这样的方法来估计执行时间。我能想到的唯一方法是,使用以前的统计数据并估计它。