Apache spark sparksql中的迭代广播连接
最近,我遇到了关于在Spark SQL中使用“迭代的”广播连接来处理倾斜的问题,以在将一个大表与另一个不太小的表连接时提高查询性能。该演讲建议使用“迭代广播连接”解决此类情况。不幸的是,这次谈话没有深入到让我理解它的实现 因此,我希望有人能通过几个例子来说明如何在Spark SQL中实现这种迭代式广播连接。如何使用Spark SQL查询和SQL-API实现相同的功能 注意:我使用的是Spark SQL查询2.4Apache spark sparksql中的迭代广播连接,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,最近,我遇到了关于在Spark SQL中使用“迭代的”广播连接来处理倾斜的问题,以在将一个大表与另一个不太小的表连接时提高查询性能。该演讲建议使用“迭代广播连接”解决此类情况。不幸的是,这次谈话没有深入到让我理解它的实现 因此,我希望有人能通过几个例子来说明如何在Spark SQL中实现这种迭代式广播连接。如何使用Spark SQL查询和SQL-API实现相同的功能 注意:我使用的是Spark SQL查询2.4 感谢您的帮助。感谢迭代广播连接:大型可能值得考虑这样一种方法:迭代地从较小(但不是那
感谢您的帮助。感谢迭代广播连接:大型可能值得考虑这样一种方法:迭代地从较小(但不是那么小)的表中获取片段,广播这些片段,与较大的表连接,然后合并结果 要解决这个问题,有一个概念叫做: i) 盐析技术::在这篇文章中,我们向一个键添加一个随机数,并使数据均匀分布在集群中 在上图中,假设我们在大表和小表上执行联接,然后将数据分成三个执行器x、y和z,如下所示,然后进行并集,因为我们有数据倾斜,所有x将在一个执行器中,y在另一个执行器中,z在另一个执行器中。 由于Y和Z数据相对较小,它将完成并等待X-executor完成,这需要时间。 因此,为了提高性能,我们应该获得X-executor数据,均匀分布在所有执行器上 由于数据卡在一个执行器上,我们将向所有键(大表和小表)添加一个随机数,并执行我们的过程 添加一个随机数:Key=explode(Key,range(1,3)),这将给出Key_1,Key_2,Key_3 现在,如果您看到的是在执行器之间均匀分布的,那么它将提供更快的性能 如果您需要更多帮助,请观看以下视频: 此链接:
.非常感谢您的回复。正如您(在回答中)所指出的,该表可以迭代地分解为多个片段并进行广播,您能否分享一个示例,说明如何使用sql查询实现相同的功能?我在上面展示的示例,因此在后端,您只需将随机数添加到keyIt,它仅在其中一个表具有唯一的键值时才起作用。如果两个表中的一个键有多条记录,该怎么办