Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark sparksql中的迭代广播连接_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark sparksql中的迭代广播连接

Apache spark sparksql中的迭代广播连接,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,最近,我遇到了关于在Spark SQL中使用“迭代的”广播连接来处理倾斜的问题,以在将一个大表与另一个不太小的表连接时提高查询性能。该演讲建议使用“迭代广播连接”解决此类情况。不幸的是,这次谈话没有深入到让我理解它的实现 因此,我希望有人能通过几个例子来说明如何在Spark SQL中实现这种迭代式广播连接。如何使用Spark SQL查询和SQL-API实现相同的功能 注意:我使用的是Spark SQL查询2.4 感谢您的帮助。感谢迭代广播连接:大型可能值得考虑这样一种方法:迭代地从较小(但不是那

最近,我遇到了关于在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,它仅在其中一个表具有唯一的键值时才起作用。如果两个表中的一个键有多条记录,该怎么办