[1.3.0] Error when calling UDF that throws an exception
- Dominant language
- Scala
- Stars
- 1.6k
- Forks
- 657
- Avg merge
- 2d 14h
- Merged PRs (30d)
- 80
Description
### Backend
VL (Velox)
### Bug description
[Expected behavior] and [actual behavior].
When we took Gluten 1.2.1, Gluten could call a Java UDF that (correctly) threw an exception, and handle it gracefully. We tried to take 1.3.0, and it gives an error `org.apache.spark.SparkException: [FAILED_EXECUTE_UDF] Failed to execute user defined function`
I ran into this while running integration tests in a more complex setup and that stacktrace included the error below. But I believe it wasn't actually a memory leak, because it would hang for a few seconds before that error. The expected behavior is that after the exception is thrown, the code to catch the exception executes successfully (and the test passes). In 1.3.0, it stops after the exception is thrown.
`project/ep/build-velox/build/velox_ep/velox/exec/Driver.cpp:601, Function:operator(), Expression: Operator::getOutput failed for [operator: ValueStream, plan node ID: 0]: Error during calling Java code from native code: org.apache.spark.SparkException: [FAILED_EXECUTE_UDF] Failed to execute user defined function (`functions$$$Lambda/0x00007f0049900ba0`: (string, string) => boolean).`
...
`, Source: RUNTIME, ErrorCode: INVALID_STATE
E20250211 22:55:13.386138 19912 VeloxMemoryManager.cc:401] Failed to release Velox memory manager after 43350ms as there are still outstanding memory resources.
E20250211 22:55:13.386179 19912 MemoryPool.cpp:442] [MEM] Memory leak (Used memory): Memory Pool[default_leaf LEAF root[root] parent[root] MALLOC track-usage thread-safe]
E20250211 22:55:13.386235 19912 Exceptions.h:66] Line: /home/circleci/project/cpp/velox/memory/VeloxMemoryManager.cc:102, Function:removePool, Expression: pool->reservedBytes() == 0 (1048576 vs. 0), Source: RUNTIME, ErrorCode: INVALID_STATE
terminate called after throwing an instance of 'facebook::velox::VeloxRuntimeError'`
I think this is a minimal repro. It's TPCDS q9.
```
export gluten_jar=~/gluten-velox-bundle-spark3.5_2.12-centos_7_x86_64-1.3.0.jar
export SPARK_HOME=~/spark-3.5.4-bin-hadoop3
export PATH=$PATH:/$SPARK_HOME/bin
spark-shell --conf spark.plugins=org.apache.gluten.GlutenPlugin --conf spark.memory.offHeap.enabled=true --conf spark.memory.offHeap.size=20g --conf spark.driver.extraClassPath=${gluten_jar} --conf spark.executor.extraClassPath=${gluten_jar} --conf spark.shuffle.manager=org.apache.spark.shuffle.sort.ColumnarShuffleManager --jars ${gluten_jar} --conf spark.gluten.enabled=true --conf spark.driver.extraJavaOptions="-Dio.netty.tryReflectionSetAccessible=true"
scala> val storeSalesDF = spark.read.format("csv").option("header", "true").load("/home/coder/store_sales.csv")
scala> val reasonsDF = spark.read.format("csv").option("header", "true").load("/home/coder/reason.csv")
scala> storeSalesDF.createOrReplaceTempView("store_sales")
scala> reasonsDF.createOrReplaceTempView("reason")
scala> val resultDF = spark.sql("""
| | SELECT CASE
| | WHEN (SELECT Count(*)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 1 AND 20) > 3672 THEN
| | (SELECT Avg(ss_ext_list_price)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 1 AND 20)
| | ELSE (SELECT Avg(ss_net_profit)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 1 AND 20)
| | END bucket1,
| | CASE
| | WHEN (SELECT Count(*)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 21 AND 40) > 3392 THEN
| | (SELECT Avg(ss_ext_list_price)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 21 AND 40)
| | ELSE (SELECT Avg(ss_net_profit)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 21 AND 40)
| | END bucket2,
| | CASE
| | WHEN (SELECT Count(*)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 41 AND 60) > 32784 THEN
| | (SELECT Avg(ss_ext_list_price)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 41 AND 60)
| | ELSE (SELECT Avg(ss_net_profit)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 41 AND 60)
| | END bucket3,
| | CASE
| | WHEN (SELECT Count(*)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 61 AND 80) > 26032 THEN
| | (SELECT Avg(ss_ext_list_price)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 61 AND 80)
| | ELSE (SELECT Avg(ss_net_profit)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 61 AND 80)
| | END bucket4,
| | CASE
| | WHEN (SELECT Count(*)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 81 AND 100) > 23982 THEN
| | (SELECT Avg(ss_ext_list_price)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 81 AND 100)
| | ELSE (SELECT Avg(ss_net_profit)
| | FROM store_sales
| | WHERE ss_quantity BETWEEN 81 AND 100)
| | END bucket5
| | FROM reason
| | WHERE r_reason_sk = 1
| | """)
scala> def throwException() = {throw new IllegalStateException("test error")}
throwException: ()Nothing
scala> val throwExceptionUdf = udf(throwException _)
throwExceptionUdf: org.apache.spark.sql.expressions.UserDefinedFunction = SparkUserDefinedFunction($Lambda$6066/0x00007fa6ed56a3f8@1c650d81,NullType,List(),Some(class[value[0]: void]),None,true,true)
scala> val resultDF2 = resultDF.withColumn("exception", throwExceptionUdf())
resultDF2: org.apache.spark.sql.DataFrame = [bucket1: double, bucket2: double ... 4 more fields]
scala> resultDF2.show()
```
### Spark version
None
### Spark configurations
Spark 3.5.4
I downloaded Spark and Gluten from https://gluten.apache.org/#31-use-a-pre-built-jar
`spark-shell --conf spark.plugins=org.apache.gluten.GlutenPlugin --conf spark.memory.offHeap.enabled=true --conf spark.memory.offHeap.size=20g --conf spark.driver.extraClassPath=${gluten_jar} --conf spark.executor.extraClassPath=${gluten_jar} --conf spark.shuffle.manager=org.apache.spark.shuffle.sort.ColumnarShuffleManager --jars ${gluten_jar} --conf spark.gluten.enabled=true --conf spark.driver.extraJavaOptions="-Dio.netty.tryReflectionSetAccessible=true"`
### System information
Ubuntu 20.04
### Relevant logs
```bash
25/02/13 02:46:51 WARN ProjectExecTransformer: Validation failed with exception for plan: ProjectExecTransformer, due to: Not supported to map spark function name to substrait function name: toprettystring(CASE WHEN (Subquery subquery#86, [id=#1775].count(1) > 3672) THEN ReusedSubquery Subquery subquery#86, [id=#1775].avg(ss_ext_list_price) ELSE ReusedSubquery Subquery subquery#86, [id=#1775].avg(ss_net_profit) END, Some(Etc/UTC)), class name: ToPrettyString.
25/02/13 02:46:51 WARN ProjectExecTransformer: Validation failed with exception for plan: ProjectExecTransformer, due to: Not supported to map spark function name to substrait function name: toprettystring(CASE WHEN (Subquery subquery#86, [id=#1775].count(1) > 3672) THEN ReusedSubquery Subquery subquery#86, [id=#1775].avg(ss_ext_list_price) ELSE ReusedSubquery Subquery subquery#86, [id=#1775].avg(ss_net_profit) END, Some(Etc/UTC)), class name: ToPrettyString.
25/02/13 02:46:51 WARN GlutenFallbackReporter: Validation failed for plan: Scan csv [QueryId=5], due to: Unsupported file format TextReadFormat..
25/02/13 02:46:51 WARN GlutenFallbackReporter: Validation failed for plan: Project[QueryId=5], due to: Not supported to map spark function name to substrait function name: toprettystring(CASE WHEN (Subquery subquery#86, [id=#1775].count(1) > 3672) THEN ReusedSubquery Subquery subquery#86, [id=#1775].avg(ss_ext_list_price) ELSE ReusedSubquery Subquery subquery#86, [id=#1775].avg(ss_net_profit) END, Some(Etc/UTC)), class name: ToPrettyString..
25/02/13 02:46:51 WARN GlutenFallbackReporter: Validation failed for plan: Scan csv [QueryId=5], due to: Unsupported file format TextReadFormat..
25/02/13 02:46:51 WARN GlutenFallbackReporter: Validation failed for plan: Scan csv [QueryId=5], due to: Unsupported file format TextReadFormat..
25/02/13 02:46:51 WARN GlutenFallbackReporter: Validation failed for plan: Scan csv [QueryId=5], due to: Unsupported file format TextReadFormat..
25/02/13 02:46:51 WARN GlutenFallbackReporter: Validation failed for plan: Scan csv [QueryId=5], due to: Unsupported file format TextReadFormat..
25/02/13 02:46:51 WARN GlutenFallbackReporter: Validation failed for plan: Scan csv [QueryId=5], due to: Unsupported file format TextReadFormat..
25/02/13 02:46:52 ERROR TaskResources: Task 23 failed by error:
org.apache.spark.SparkException: [FAILED_EXECUTE_UDF] Failed to execute user defined function (`$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$Lambda$6066/0x00007fa6ed56a3f8`: () => void).
at org.apache.spark.sql.errors.QueryExecutionErrors$.failedExecuteUserDefinedFunctionError(QueryExecutionErrors.scala:198)
at org.apache.spark.sql.errors.QueryExecutionErrors.failedExecuteUserDefinedFunctionError(QueryExecutionErrors.scala)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
at org.apache.spark.sql.execution.WholeStageCodegenEvaluatorFactory$WholeStageCodegenPartitionEvaluator$$anon$1.hasNext(WholeStageCodegenEvaluatorFactory.scala:43)
at org.apache.spark.sql.execution.SparkPlan.$anonfun$getByteArrayRdd$1(SparkPlan.scala:388)
at org.apache.spark.rdd.RDD.$anonfun$mapPartitionsInternal$2(RDD.scala:893)
at org.apache.spark.rdd.RDD.$anonfun$mapPartitionsInternal$2$adapted(RDD.scala:893)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:52)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:367)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:331)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:93)
at org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:166)
at org.apache.spark.scheduler.Task.run(Task.scala:141)
at org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:620)
at org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:64)
at org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:61)
at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:94)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:623)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.IllegalStateException: test error
at $line24.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.throwException(:22)
at $line25.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.$anonfun$throwExceptionUdf$1(:23)
... 20 more
E20250213 02:46:52.092774 97905 Exceptions.h:66] Line: /root/src/weiting/gluten/ep/build-velox/build/velox_ep/velox/exec/Task.cpp:2039, Function:terminate, Expression: Cancelled, Source: RUNTIME, ErrorCode: INVALID_STATE
25/02/13 02:46:52 ERROR Executor: Exception in task 0.0 in stage 33.0 (TID 23)
org.apache.spark.SparkException: [FAILED_EXECUTE_UDF] Failed to execute user defined function (`$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$Lambda$6066/0x00007fa6ed56a3f8`: () => void).
at org.apache.spark.sql.errors.QueryExecutionErrors$.failedExecuteUserDefinedFunctionError(QueryExecutionErrors.scala:198)
at org.apache.spark.sql.errors.QueryExecutionErrors.failedExecuteUserDefinedFunctionError(QueryExecutionErrors.scala)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
at org.apache.spark.sql.execution.WholeStageCodegenEvaluatorFactory$WholeStageCodegenPartitionEvaluator$$anon$1.hasNext(WholeStageCodegenEvaluatorFactory.scala:43)
at org.apache.spark.sql.execution.SparkPlan.$anonfun$getByteArrayRdd$1(SparkPlan.scala:388)
at org.apache.spark.rdd.RDD.$anonfun$mapPartitionsInternal$2(RDD.scala:893)
at org.apache.spark.rdd.RDD.$anonfun$mapPartitionsInternal$2$adapted(RDD.scala:893)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:52)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:367)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:331)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:93)
at org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:166)
at org.apache.spark.scheduler.Task.run(Task.scala:141)
at org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:620)
at org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:64)
at org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:61)
at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:94)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:623)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.IllegalStateException: test error
at $line24.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.throwException(:22)
at $line25.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.$anonfun$throwExceptionUdf$1(:23)
... 20 more
25/02/13 02:46:52 WARN TaskSetManager: Lost task 0.0 in stage 33.0 (TID 23) (za-gluten-repro-udf2 executor driver): org.apache.spark.SparkException: [FAILED_EXECUTE_UDF] Failed to execute user defined function (`$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$Lambda$6066/0x00007fa6ed56a3f8`: () => void).
at org.apache.spark.sql.errors.QueryExecutionErrors$.failedExecuteUserDefinedFunctionError(QueryExecutionErrors.scala:198)
at org.apache.spark.sql.errors.QueryExecutionErrors.failedExecuteUserDefinedFunctionError(QueryExecutionErrors.scala)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
at org.apache.spark.sql.execution.WholeStageCodegenEvaluatorFactory$WholeStageCodegenPartitionEvaluator$$anon$1.hasNext(WholeStageCodegenEvaluatorFactory.scala:43)
at org.apache.spark.sql.execution.SparkPlan.$anonfun$getByteArrayRdd$1(SparkPlan.scala:388)
at org.apache.spark.rdd.RDD.$anonfun$mapPartitionsInternal$2(RDD.scala:893)
at org.apache.spark.rdd.RDD.$anonfun$mapPartitionsInternal$2$adapted(RDD.scala:893)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:52)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:367)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:331)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:93)
at org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:166)
at org.apache.spark.scheduler.Task.run(Task.scala:141)
at org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:620)
at org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:64)
at org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:61)
at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:94)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:623)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.IllegalStateException: test error
at $line24.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.throwException(:22)
at $line25.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.$anonfun$throwExceptionUdf$1(:23)
... 20 more
25/02/13 02:46:52 ERROR TaskSetManager: Task 0 in stage 33.0 failed 1 times; aborting job
org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 33.0 failed 1 times, most recent failure: Lost task 0.0 in stage 33.0 (TID 23) (za-gluten-repro-udf2 executor driver): org.apache.spark.SparkException: [FAILED_EXECUTE_UDF] Failed to execute user defined function (`$Lambda$6066/0x00007fa6ed56a3f8`: () => void).
at org.apache.spark.sql.errors.QueryExecutionErrors$.failedExecuteUserDefinedFunctionError(QueryExecutionErrors.scala:198)
at org.apache.spark.sql.errors.QueryExecutionErrors.failedExecuteUserDefinedFunctionError(QueryExecutionErrors.scala)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
at org.apache.spark.sql.execution.WholeStageCodegenEvaluatorFactory$WholeStageCodegenPartitionEvaluator$$anon$1.hasNext(WholeStageCodegenEvaluatorFactory.scala:43)
at org.apache.spark.sql.execution.SparkPlan.$anonfun$getByteArrayRdd$1(SparkPlan.scala:388)
at org.apache.spark.rdd.RDD.$anonfun$mapPartitionsInternal$2(RDD.scala:893)
at org.apache.spark.rdd.RDD.$anonfun$mapPartitionsInternal$2$adapted(RDD.scala:893)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:52)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:367)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:331)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:93)
at org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:166)
at org.apache.spark.scheduler.Task.run(Task.scala:141)
at org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:620)
at org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:64)
at org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:61)
at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:94)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:623)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.IllegalStateException: test error
at throwException(:22)
at $anonfun$throwExceptionUdf$1(:23)
... 20 more
Driver stacktrace:
at org.apache.spark.scheduler.DAGScheduler.failJobAndIndependentStages(DAGScheduler.scala:2856)
at org.apache.spark.scheduler.DAGScheduler.$anonfun$abortStage$2(DAGScheduler.scala:2792)
at org.apache.spark.scheduler.DAGScheduler.$anonfun$abortStage$2$adapted(DAGScheduler.scala:2791)
at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)
at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:49)
at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:2791)
at org.apache.spark.scheduler.DAGScheduler.$anonfun$handleTaskSetFailed$1(DAGScheduler.scala:1247)
at org.apache.spark.scheduler.DAGScheduler.$anonfun$handleTaskSetFailed$1$adapted(DAGScheduler.scala:1247)
at scala.Option.foreach(Option.scala:407)
at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:1247)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:3060)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:2994)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:2983)
at org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:49)
at org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:989)
at org.apache.spark.SparkContext.runJob(SparkContext.scala:2393)
at org.apache.spark.SparkContext.runJob(SparkContext.scala:2414)
at org.apache.spark.SparkContext.runJob(SparkContext.scala:2433)
at org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:530)
at org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:483)
at org.apache.spark.sql.execution.CollectLimitExec.executeCollect(limit.scala:61)
at org.apache.spark.sql.execution.adaptive.AdaptiveSparkPlanExec.$anonfun$executeCollect$1(AdaptiveSparkPlanExec.scala:392)
at org.apache.spark.sql.execution.adaptive.AdaptiveSparkPlanExec.withFinalPlanUpdate(AdaptiveSparkPlanExec.scala:420)
at org.apache.spark.sql.execution.adaptive.AdaptiveSparkPlanExec.executeCollect(AdaptiveSparkPlanExec.scala:392)
at org.apache.spark.sql.Dataset.collectFromPlan(Dataset.scala:4333)
at org.apache.spark.sql.Dataset.$anonfun$head$1(Dataset.scala:3316)
at org.apache.spark.sql.Dataset.$anonfun$withAction$2(Dataset.scala:4323)
at org.apache.spark.sql.execution.QueryExecution$.withInternalError(QueryExecution.scala:546)
at org.apache.spark.sql.Dataset.$anonfun$withAction$1(Dataset.scala:4321)
at org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$6(SQLExecution.scala:125)
at org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:201)
at org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:108)
at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:900)
at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:66)
at org.apache.spark.sql.Dataset.withAction(Dataset.scala:4321)
at org.apache.spark.sql.Dataset.head(Dataset.scala:3316)
at org.apache.spark.sql.Dataset.take(Dataset.scala:3539)
at org.apache.spark.sql.Dataset.getRows(Dataset.scala:280)
at org.apache.spark.sql.Dataset.showString(Dataset.scala:315)
at org.apache.spark.sql.Dataset.show(Dataset.scala:838)
at org.apache.spark.sql.Dataset.show(Dataset.scala:797)
at org.apache.spark.sql.Dataset.show(Dataset.scala:806)
... 47 elided
Caused by: org.apache.spark.SparkException: [FAILED_EXECUTE_UDF] Failed to execute user defined function (`$Lambda$6066/0x00007fa6ed56a3f8`: () => void).
at org.apache.spark.sql.errors.QueryExecutionErrors$.failedExecuteUserDefinedFunctionError(QueryExecutionErrors.scala:198)
at org.apache.spark.sql.errors.QueryExecutionErrors.failedExecuteUserDefinedFunctionError(QueryExecutionErrors.scala)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
at org.apache.spark.sql.execution.WholeStageCodegenEvaluatorFactory$WholeStageCodegenPartitionEvaluator$$anon$1.hasNext(WholeStageCodegenEvaluatorFactory.scala:43)
at org.apache.spark.sql.execution.SparkPlan.$anonfun$getByteArrayRdd$1(SparkPlan.scala:388)
at org.apache.spark.rdd.RDD.$anonfun$mapPartitionsInternal$2(RDD.scala:893)
at org.apache.spark.rdd.RDD.$anonfun$mapPartitionsInternal$2$adapted(RDD.scala:893)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:52)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:367)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:331)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:93)
at org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:166)
at org.apache.spark.scheduler.Task.run(Task.scala:141)
at org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:620)
at org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:64)
at org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:61)
at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:94)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:623)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.IllegalStateException: test error
at throwException(:22)
at $anonfun$throwExceptionUdf$1(:23)
... 20 more
scala> resultDF2.explain()
== Physical Plan ==
AdaptiveSparkPlan isFinalPlan=false
+- Project [CASE WHEN (Subquery subquery#86, [id=#2896].count(1) > 3672) THEN Subquery subquery#87, [id=#2897].avg(ss_ext_list_price) ELSE Subquery subquery#88, [id=#2898].avg(ss_net_profit) END AS bucket1#89, CASE WHEN (Subquery subquery#90, [id=#2899].count(1) > 3392) THEN Subquery subquery#91, [id=#2900].avg(ss_ext_list_price) ELSE Subquery subquery#92, [id=#2901].avg(ss_net_profit) END AS bucket2#93, CASE WHEN (Subquery subquery#94, [id=#2902].count(1) > 32784) THEN Subquery subquery#95, [id=#2903].avg(ss_ext_list_price) ELSE Subquery subquery#96, [id=#2904].avg(ss_net_profit) END AS bucket3#97, CASE WHEN (Subquery subquery#98, [id=#2905].count(1) > 26032) THEN Subquery subquery#99, [id=#2906].avg(ss_ext_list_price) ELSE Subquery subquery#100, [id=#2907].avg(ss_net_profit) END AS bucket4#101, CASE WHEN (Subquery subquery#102, [id=#2908].count(1) > 23982) THEN Subquery subquery#103, [id=#2909].avg(ss_ext_list_price) ELSE Subquery subquery#104, [id=#2910].avg(ss_net_profit) END AS bucket5#105, UDF() AS exception#826]
: :- Subquery subquery#86, [id=#2896]
: : +- AdaptiveSparkPlan isFinalPlan=false
: : +- Project [named_struct(count(1), count(1)#107L, avg(ss_ext_list_price), avg(ss_ext_list_price)#109, avg(ss_net_profit), avg(ss_net_profit)#111) AS mergedValue#1188]
: : +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#33 as double)), avg(cast(ss_net_profit#38 as double))])
: : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2669]
: : +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#33 as double)), partial_avg(cast(ss_net_profit#38 as double))])
: : +- Project [ss_ext_list_price#33, ss_net_profit#38]
: : +- Filter ((isnotnull(ss_quantity#26) AND (cast(ss_quantity#26 as int) >= 1)) AND (cast(ss_quantity#26 as int) <= 20))
: : +- FileScan csv [ss_quantity#26,ss_ext_list_price#33,ss_net_profit#38] Batched: false, DataFilters: [isnotnull(ss_quantity#26), (cast(ss_quantity#26 as int) >= 1), (cast(ss_quantity#26 as int) <= 20)], Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
: :- Subquery subquery#87, [id=#2897]
: : +- AdaptiveSparkPlan isFinalPlan=false
: : +- Project [named_struct(count(1), count(1)#107L, avg(ss_ext_list_price), avg(ss_ext_list_price)#109, avg(ss_net_profit), avg(ss_net_profit)#111) AS mergedValue#1188]
: : +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#33 as double)), avg(cast(ss_net_profit#38 as double))])
: : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2685]
: : +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#33 as double)), partial_avg(cast(ss_net_profit#38 as double))])
: : +- Project [ss_ext_list_price#33, ss_net_profit#38]
: : +- Filter ((isnotnull(ss_quantity#26) AND (cast(ss_quantity#26 as int) >= 1)) AND (cast(ss_quantity#26 as int) <= 20))
: : +- FileScan csv [ss_quantity#26,ss_ext_list_price#33,ss_net_profit#38] Batched: false, DataFilters: [isnotnull(ss_quantity#26), (cast(ss_quantity#26 as int) >= 1), (cast(ss_quantity#26 as int) <= 20)], Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
: :- Subquery subquery#88, [id=#2898]
: : +- AdaptiveSparkPlan isFinalPlan=false
: : +- Project [named_struct(count(1), count(1)#107L, avg(ss_ext_list_price), avg(ss_ext_list_price)#109, avg(ss_net_profit), avg(ss_net_profit)#111) AS mergedValue#1188]
: : +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#33 as double)), avg(cast(ss_net_profit#38 as double))])
: : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2701]
: : +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#33 as double)), partial_avg(cast(ss_net_profit#38 as double))])
: : +- Project [ss_ext_list_price#33, ss_net_profit#38]
: : +- Filter ((isnotnull(ss_quantity#26) AND (cast(ss_quantity#26 as int) >= 1)) AND (cast(ss_quantity#26 as int) <= 20))
: : +- FileScan csv [ss_quantity#26,ss_ext_list_price#33,ss_net_profit#38] Batched: false, DataFilters: [isnotnull(ss_quantity#26), (cast(ss_quantity#26 as int) >= 1), (cast(ss_quantity#26 as int) <= 20)], Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
: :- Subquery subquery#90, [id=#2899]
: : +- AdaptiveSparkPlan isFinalPlan=false
: : +- Project [named_struct(count(1), count(1)#113L, avg(ss_ext_list_price), avg(ss_ext_list_price)#115, avg(ss_net_profit), avg(ss_net_profit)#117) AS mergedValue#1189]
: : +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#198 as double)), avg(cast(ss_net_profit#203 as double))])
: : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2717]
: : +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#198 as double)), partial_avg(cast(ss_net_profit#203 as double))])
: : +- Project [ss_ext_list_price#198, ss_net_profit#203]
: : +- Filter ((isnotnull(ss_quantity#191) AND (cast(ss_quantity#191 as int) >= 21)) AND (cast(ss_quantity#191 as int) <= 40))
: : +- FileScan csv [ss_quantity#191,ss_ext_list_price#198,ss_net_profit#203] Batched: false, DataFilters: [isnotnull(ss_quantity#191), (cast(ss_quantity#191 as int) >= 21), (cast(ss_quantity#191 as int) ..., Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
: :- Subquery subquery#91, [id=#2900]
: : +- AdaptiveSparkPlan isFinalPlan=false
: : +- Project [named_struct(count(1), count(1)#113L, avg(ss_ext_list_price), avg(ss_ext_list_price)#115, avg(ss_net_profit), avg(ss_net_profit)#117) AS mergedValue#1189]
: : +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#198 as double)), avg(cast(ss_net_profit#203 as double))])
: : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2733]
: : +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#198 as double)), partial_avg(cast(ss_net_profit#203 as double))])
: : +- Project [ss_ext_list_price#198, ss_net_profit#203]
: : +- Filter ((isnotnull(ss_quantity#191) AND (cast(ss_quantity#191 as int) >= 21)) AND (cast(ss_quantity#191 as int) <= 40))
: : +- FileScan csv [ss_quantity#191,ss_ext_list_price#198,ss_net_profit#203] Batched: false, DataFilters: [isnotnull(ss_quantity#191), (cast(ss_quantity#191 as int) >= 21), (cast(ss_quantity#191 as int) ..., Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
: :- Subquery subquery#92, [id=#2901]
: : +- AdaptiveSparkPlan isFinalPlan=false
: : +- Project [named_struct(count(1), count(1)#113L, avg(ss_ext_list_price), avg(ss_ext_list_price)#115, avg(ss_net_profit), avg(ss_net_profit)#117) AS mergedValue#1189]
: : +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#198 as double)), avg(cast(ss_net_profit#203 as double))])
: : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2749]
: : +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#198 as double)), partial_avg(cast(ss_net_profit#203 as double))])
: : +- Project [ss_ext_list_price#198, ss_net_profit#203]
: : +- Filter ((isnotnull(ss_quantity#191) AND (cast(ss_quantity#191 as int) >= 21)) AND (cast(ss_quantity#191 as int) <= 40))
: : +- FileScan csv [ss_quantity#191,ss_ext_list_price#198,ss_net_profit#203] Batched: false, DataFilters: [isnotnull(ss_quantity#191), (cast(ss_quantity#191 as int) >= 21), (cast(ss_quantity#191 as int) ..., Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
: :- Subquery subquery#94, [id=#2902]
: : +- AdaptiveSparkPlan isFinalPlan=false
: : +- Project [named_struct(count(1), count(1)#119L, avg(ss_ext_list_price), avg(ss_ext_list_price)#121, avg(ss_net_profit), avg(ss_net_profit)#123) AS mergedValue#1190]
: : +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#267 as double)), avg(cast(ss_net_profit#272 as double))])
: : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2765]
: : +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#267 as double)), partial_avg(cast(ss_net_profit#272 as double))])
: : +- Project [ss_ext_list_price#267, ss_net_profit#272]
: : +- Filter ((isnotnull(ss_quantity#260) AND (cast(ss_quantity#260 as int) >= 41)) AND (cast(ss_quantity#260 as int) <= 60))
: : +- FileScan csv [ss_quantity#260,ss_ext_list_price#267,ss_net_profit#272] Batched: false, DataFilters: [isnotnull(ss_quantity#260), (cast(ss_quantity#260 as int) >= 41), (cast(ss_quantity#260 as int) ..., Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
: :- Subquery subquery#95, [id=#2903]
: : +- AdaptiveSparkPlan isFinalPlan=false
: : +- Project [named_struct(count(1), count(1)#119L, avg(ss_ext_list_price), avg(ss_ext_list_price)#121, avg(ss_net_profit), avg(ss_net_profit)#123) AS mergedValue#1190]
: : +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#267 as double)), avg(cast(ss_net_profit#272 as double))])
: : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2781]
: : +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#267 as double)), partial_avg(cast(ss_net_profit#272 as double))])
: : +- Project [ss_ext_list_price#267, ss_net_profit#272]
: : +- Filter ((isnotnull(ss_quantity#260) AND (cast(ss_quantity#260 as int) >= 41)) AND (cast(ss_quantity#260 as int) <= 60))
: : +- FileScan csv [ss_quantity#260,ss_ext_list_price#267,ss_net_profit#272] Batched: false, DataFilters: [isnotnull(ss_quantity#260), (cast(ss_quantity#260 as int) >= 41), (cast(ss_quantity#260 as int) ..., Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
: :- Subquery subquery#96, [id=#2904]
: : +- AdaptiveSparkPlan isFinalPlan=false
: : +- Project [named_struct(count(1), count(1)#119L, avg(ss_ext_list_price), avg(ss_ext_list_price)#121, avg(ss_net_profit), avg(ss_net_profit)#123) AS mergedValue#1190]
: : +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#267 as double)), avg(cast(ss_net_profit#272 as double))])
: : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2797]
: : +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#267 as double)), partial_avg(cast(ss_net_profit#272 as double))])
: : +- Project [ss_ext_list_price#267, ss_net_profit#272]
: : +- Filter ((isnotnull(ss_quantity#260) AND (cast(ss_quantity#260 as int) >= 41)) AND (cast(ss_quantity#260 as int) <= 60))
: : +- FileScan csv [ss_quantity#260,ss_ext_list_price#267,ss_net_profit#272] Batched: false, DataFilters: [isnotnull(ss_quantity#260), (cast(ss_quantity#260 as int) >= 41), (cast(ss_quantity#260 as int) ..., Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
: :- Subquery subquery#98, [id=#2905]
: : +- AdaptiveSparkPlan isFinalPlan=false
: : +- Project [named_struct(count(1), count(1)#125L, avg(ss_ext_list_price), avg(ss_ext_list_price)#127, avg(ss_net_profit), avg(ss_net_profit)#129) AS mergedValue#1191]
: : +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#336 as double)), avg(cast(ss_net_profit#341 as double))])
: : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2813]
: : +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#336 as double)), partial_avg(cast(ss_net_profit#341 as double))])
: : +- Project [ss_ext_list_price#336, ss_net_profit#341]
: : +- Filter ((isnotnull(ss_quantity#329) AND (cast(ss_quantity#329 as int) >= 61)) AND (cast(ss_quantity#329 as int) <= 80))
: : +- FileScan csv [ss_quantity#329,ss_ext_list_price#336,ss_net_profit#341] Batched: false, DataFilters: [isnotnull(ss_quantity#329), (cast(ss_quantity#329 as int) >= 61), (cast(ss_quantity#329 as int) ..., Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
: :- Subquery subquery#99, [id=#2906]
: : +- AdaptiveSparkPlan isFinalPlan=false
: : +- Project [named_struct(count(1), count(1)#125L, avg(ss_ext_list_price), avg(ss_ext_list_price)#127, avg(ss_net_profit), avg(ss_net_profit)#129) AS mergedValue#1191]
: : +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#336 as double)), avg(cast(ss_net_profit#341 as double))])
: : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2829]
: : +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#336 as double)), partial_avg(cast(ss_net_profit#341 as double))])
: : +- Project [ss_ext_list_price#336, ss_net_profit#341]
: : +- Filter ((isnotnull(ss_quantity#329) AND (cast(ss_quantity#329 as int) >= 61)) AND (cast(ss_quantity#329 as int) <= 80))
: : +- FileScan csv [ss_quantity#329,ss_ext_list_price#336,ss_net_profit#341] Batched: false, DataFilters: [isnotnull(ss_quantity#329), (cast(ss_quantity#329 as int) >= 61), (cast(ss_quantity#329 as int) ..., Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
: :- Subquery subquery#100, [id=#2907]
: : +- AdaptiveSparkPlan isFinalPlan=false
: : +- Project [named_struct(count(1), count(1)#125L, avg(ss_ext_list_price), avg(ss_ext_list_price)#127, avg(ss_net_profit), avg(ss_net_profit)#129) AS mergedValue#1191]
: : +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#336 as double)), avg(cast(ss_net_profit#341 as double))])
: : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2845]
: : +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#336 as double)), partial_avg(cast(ss_net_profit#341 as double))])
: : +- Project [ss_ext_list_price#336, ss_net_profit#341]
: : +- Filter ((isnotnull(ss_quantity#329) AND (cast(ss_quantity#329 as int) >= 61)) AND (cast(ss_quantity#329 as int) <= 80))
: : +- FileScan csv [ss_quantity#329,ss_ext_list_price#336,ss_net_profit#341] Batched: false, DataFilters: [isnotnull(ss_quantity#329), (cast(ss_quantity#329 as int) >= 61), (cast(ss_quantity#329 as int) ..., Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
: :- Subquery subquery#102, [id=#2908]
: : +- AdaptiveSparkPlan isFinalPlan=false
: : +- Project [named_struct(count(1), count(1)#131L, avg(ss_ext_list_price), avg(ss_ext_list_price)#133, avg(ss_net_profit), avg(ss_net_profit)#135) AS mergedValue#1192]
: : +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#405 as double)), avg(cast(ss_net_profit#410 as double))])
: : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2861]
: : +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#405 as double)), partial_avg(cast(ss_net_profit#410 as double))])
: : +- Project [ss_ext_list_price#405, ss_net_profit#410]
: : +- Filter ((isnotnull(ss_quantity#398) AND (cast(ss_quantity#398 as int) >= 81)) AND (cast(ss_quantity#398 as int) <= 100))
: : +- FileScan csv [ss_quantity#398,ss_ext_list_price#405,ss_net_profit#410] Batched: false, DataFilters: [isnotnull(ss_quantity#398), (cast(ss_quantity#398 as int) >= 81), (cast(ss_quantity#398 as int) ..., Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
: :- Subquery subquery#103, [id=#2909]
: : +- AdaptiveSparkPlan isFinalPlan=false
: : +- Project [named_struct(count(1), count(1)#131L, avg(ss_ext_list_price), avg(ss_ext_list_price)#133, avg(ss_net_profit), avg(ss_net_profit)#135) AS mergedValue#1192]
: : +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#405 as double)), avg(cast(ss_net_profit#410 as double))])
: : +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2877]
: : +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#405 as double)), partial_avg(cast(ss_net_profit#410 as double))])
: : +- Project [ss_ext_list_price#405, ss_net_profit#410]
: : +- Filter ((isnotnull(ss_quantity#398) AND (cast(ss_quantity#398 as int) >= 81)) AND (cast(ss_quantity#398 as int) <= 100))
: : +- FileScan csv [ss_quantity#398,ss_ext_list_price#405,ss_net_profit#410] Batched: false, DataFilters: [isnotnull(ss_quantity#398), (cast(ss_quantity#398 as int) >= 81), (cast(ss_quantity#398 as int) ..., Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
: +- Subquery subquery#104, [id=#2910]
: +- AdaptiveSparkPlan isFinalPlan=false
: +- Project [named_struct(count(1), count(1)#131L, avg(ss_ext_list_price), avg(ss_ext_list_price)#133, avg(ss_net_profit), avg(ss_net_profit)#135) AS mergedValue#1192]
: +- HashAggregate(keys=[], functions=[count(1), avg(cast(ss_ext_list_price#405 as double)), avg(cast(ss_net_profit#410 as double))])
: +- Exchange SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2893]
: +- HashAggregate(keys=[], functions=[partial_count(1), partial_avg(cast(ss_ext_list_price#405 as double)), partial_avg(cast(ss_net_profit#410 as double))])
: +- Project [ss_ext_list_price#405, ss_net_profit#410]
: +- Filter ((isnotnull(ss_quantity#398) AND (cast(ss_quantity#398 as int) >= 81)) AND (cast(ss_quantity#398 as int) <= 100))
: +- FileScan csv [ss_quantity#398,ss_ext_list_price#405,ss_net_profit#410] Batched: false, DataFilters: [isnotnull(ss_quantity#398), (cast(ss_quantity#398 as int) >= 81), (cast(ss_quantity#398 as int) ..., Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/store_sales.csv], PartitionFilters: [], PushedFilters: [IsNotNull(ss_quantity)], ReadSchema: struct
+- Filter (isnotnull(r_reason_sk#80) AND (cast(r_reason_sk#80 as int) = 1))
+- FileScan csv [r_reason_sk#80] Batched: false, DataFilters: [isnotnull(r_reason_sk#80), (cast(r_reason_sk#80 as int) = 1)], Format: CSV, Location: InMemoryFileIndex(1 paths)[file:/home/coder/reason.csv], PartitionFilters: [], PushedFilters: [IsNotNull(r_reason_sk)], ReadSchema: struct
```
Contributor guide
Assessment
This issue has not been assessed yet.