S G*_*uly 3 amazon-emr apache-spark apache-spark-sql pyspark
我有一个小表(2k)记录和大表(500万)记录。我需要从小表中获取所有数据,并且只从大表中获取匹配数据,因此为了实现这一点,我执行了下面的查询虽然
select /*+ broadcast(small)*/ small.* From small left outer join large
查询返回正确的结果,但是当我检查查询计划时,它显示排序合并的广播哈希连接。如果小桌留下的桌我们不能广播,有什么限制吗?那么出路是什么?
小智 8
由于您希望从小表而不是大表中选择整个数据集,因此 Spark 不会强制执行广播连接。但是,如果您更改连接顺序或转换为等连接,Spark 将很乐意启用广播连接。
例如:
原因:造成 这种情况的原因是Spark将小表(也称为广播表)共享给大表数据存在的所有数据节点。在您的情况下,您需要小表中的所有数据,但只需要大表中的匹配数据。Spark无法确定特定记录是否在另一个数据节点匹配或根本不匹配,因此如果小表是分布式的,则从小表中选择所有记录时会存在歧义。因此,Spark 在这种情况下不会使用广播连接。
| 归档时间: |
|
| 查看次数: |
9994 次 |
| 最近记录: |