BryanCutler commented on a change in pull request #24677: [SPARK-27805][PYTHON]
Propagate SparkExceptions during toPandas with arrow enabled
URL: https://github.com/apache/spark/pull/24677#discussion_r288344919
##########
File path: sql/core/src/main/scala/org/apache/spark/sql/Dataset.scala
##########
@@ -3313,20 +3313,35 @@ class Dataset[T] private[sql](
}
}
- val arrowBatchRdd = toArrowBatchRdd(plan)
- sparkSession.sparkContext.runJob(
- arrowBatchRdd,
- (it: Iterator[Array[Byte]]) => it.toArray,
- handlePartitionBatches)
+ var sparkException: Option[SparkException] = Option.empty
+ try {
+ val arrowBatchRdd = toArrowBatchRdd(plan)
+ sparkSession.sparkContext.runJob(
+ arrowBatchRdd,
+ (it: Iterator[Array[Byte]]) => it.toArray,
+ handlePartitionBatches)
+ } catch {
+ case e: SparkException =>
+ sparkException = Option.apply(e)
+ }
- // After processing all partitions, end the stream and write batch
order indices
+ // After processing all partitions, end the batch stream
batchWriter.end()
- out.writeInt(batchOrder.length)
- // Sort by (index of partition, batch index in that partition) tuple
to get the
- // overall_batch_index from 0 to N-1 batches, which can be used to put
the
- // transferred batches in the correct order
- batchOrder.zipWithIndex.sortBy(_._1).foreach { case (_,
overallBatchIndex) =>
- out.writeInt(overallBatchIndex)
+ sparkException match {
+ case Some(exception) =>
+ // Signal failure and write error message
+ out.writeBoolean(false)
Review comment:
Instead of writing a boolean value, how about sending a `-1` for the batch
order length? This is similar to what's done in `toLocalIterator`
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]