Peter Toth created SPARK-60460:
----------------------------------

             Summary: Fix storage-partitioned join failures over a nested join 
that shuffles one side
                 Key: SPARK-60460
                 URL: https://issues.apache.org/jira/browse/SPARK-60460
             Project: Spark
          Issue Type: Bug
          Components: SQL
    Affects Versions: 5.0.0
            Reporter: Peter Toth


On 4.0 and 4.1, a storage-partitioned join planned over another one fails when 
the inner join shuffles one of its sides 
(`spark.sql.sources.v2.bucketing.shuffle.enabled=true`). The outer join pushes 
its merged partition values into the inner join's partitioned scan, so that 
scan now has more partitions. The exchange that shuffled the inner join's other 
side keeps the partition count it was planned with.

4.2 and later regroup above the inner join with `GroupPartitionsExec` 
(SPARK-55535), so they are not affected.

{code:sql}
-- pa and pc PARTITIONED BY (id), pd not partitioned
-- pa: 1, 2, 3    pd: 1, 2, 3    pc: 1, 2, 3, 4, 5
SELECT /*+ MERGE(pa, pd, pc) */ pa.id, pd.id, pc.id
FROM pa JOIN pd ON pa.id = pd.id
JOIN pc ON pa.id = pc.id
{code}

With `spark.sql.sources.v2.bucketing.shuffle.enabled=true`, measured on 
branch-4.0 (2be20e25823) and branch-4.1 (9762e41a34f):
* AQE off: {{IllegalArgumentException: Can't zip RDDs with unequal numbers of 
partitions: List(5, 3)}}
* AQE on: {{requirement failed: PartitioningCollection requires all of its 
partitionings have the same numPartitions}}

branch-4.2 and master return the 3 rows with one shuffle.

Stopping the push at the exchange does not fix it, since the exchange still has 
the old partition count. A fix has to either re-plan that exchange onto the 
merged values, or refuse the SPJ for such a child.

Found while reviewing apache/spark#59599 (SPARK-60232). That PR handles the 
broadcast build-side half of the same push.




--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to