Skip to content

Commit ea250da

Browse files
committed
Disable unsafe Exchange path when RangePartitioning is used
1 parent 715517b commit ea250da

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

sql/core/src/main/scala/org/apache/spark/sql/execution/Exchange.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,12 @@ case class Exchange(newPartitioning: Partitioning, child: SparkPlan) extends Una
4747

4848
override def canProcessSafeRows: Boolean = true
4949

50-
override def canProcessUnsafeRows: Boolean = true
50+
override def canProcessUnsafeRows: Boolean = {
51+
// Do not use the Unsafe path if we are using a RangePartitioning, since this may lead to
52+
// an interpreted RowOrdering being applied to an UnsafeRow, which will lead to
53+
// ClassCastExceptions at runtime. This check can be removed after SPARK-9054 is fixed.
54+
!newPartitioning.isInstanceOf[RangePartitioning]
55+
}
5156

5257
/**
5358
* Determines whether records must be defensively copied before being sent to the shuffle.

0 commit comments

Comments
 (0)