Fu Chen created SPARK-36715:
-------------------------------

             Summary: explode(UDF) throw an exception
                 Key: SPARK-36715
                 URL: https://issues.apache.org/jira/browse/SPARK-36715
             Project: Spark
          Issue Type: Bug
          Components: SQL
    Affects Versions: 3.1.2
            Reporter: Fu Chen


Code to reproduce:

 
{code:java}
spark.udf.register("vec", (i: Int) => (0 until i).toArray)
sql("select explode(vec(8)) as c1").show{code}
{code:java}
Once strategy's idempotence is broken for batch Infer FiltersOnce strategy's 
idempotence is broken for batch Infer Filters GlobalLimit 21                    
                                    GlobalLimit 21 +- LocalLimit 21             
                                         +- LocalLimit 21    +- Project 
[cast(c1#3 as string) AS c1#12]                            +- Project 
[cast(c1#3 as string) AS c1#12]       +- Generate explode(vec(8)), false, 
[c1#3]                            +- Generate explode(vec(8)), false, [c1#3]    
      +- Filter ((size(vec(8), true) > 0) AND isnotnull(vec(8)))            +- 
Filter ((size(vec(8), true) > 0) AND isnotnull(vec(8)))!            +- 
OneRowRelation                                                     +- Filter 
((size(vec(8), true) > 0) AND isnotnull(vec(8)))!                               
                                                      +- OneRowRelation       
java.lang.RuntimeException: Once strategy's idempotence is broken for batch 
Infer Filters GlobalLimit 21                                                    
    GlobalLimit 21 +- LocalLimit 21                                             
         +- LocalLimit 21    +- Project [cast(c1#3 as string) AS c1#12]         
                   +- Project [cast(c1#3 as string) AS c1#12]       +- Generate 
explode(vec(8)), false, [c1#3]                            +- Generate 
explode(vec(8)), false, [c1#3]          +- Filter ((size(vec(8), true) > 0) AND 
isnotnull(vec(8)))            +- Filter ((size(vec(8), true) > 0) AND 
isnotnull(vec(8)))!            +- OneRowRelation                                
                     +- Filter ((size(vec(8), true) > 0) AND 
isnotnull(vec(8)))!                                                             
                        +- OneRowRelation        at 
org.apache.spark.sql.errors.QueryExecutionErrors$.onceStrategyIdempotenceIsBrokenForBatchError(QueryExecutionErrors.scala:1200)
 at 
org.apache.spark.sql.catalyst.rules.RuleExecutor.checkBatchIdempotence(RuleExecutor.scala:168)
 at 
org.apache.spark.sql.catalyst.rules.RuleExecutor.$anonfun$execute$1(RuleExecutor.scala:254)
 at 
org.apache.spark.sql.catalyst.rules.RuleExecutor.$anonfun$execute$1$adapted(RuleExecutor.scala:200)
 at scala.collection.immutable.List.foreach(List.scala:431) at 
org.apache.spark.sql.catalyst.rules.RuleExecutor.execute(RuleExecutor.scala:200)
 at 
org.apache.spark.sql.catalyst.rules.RuleExecutor.$anonfun$executeAndTrack$1(RuleExecutor.scala:179)
 at 
org.apache.spark.sql.catalyst.QueryPlanningTracker$.withTracker(QueryPlanningTracker.scala:88)
 at 
org.apache.spark.sql.catalyst.rules.RuleExecutor.executeAndTrack(RuleExecutor.scala:179)
 at 
org.apache.spark.sql.execution.QueryExecution.$anonfun$optimizedPlan$1(QueryExecution.scala:138)
 at 
org.apache.spark.sql.catalyst.QueryPlanningTracker.measurePhase(QueryPlanningTracker.scala:111)
 at 
org.apache.spark.sql.execution.QueryExecution.$anonfun$executePhase$1(QueryExecution.scala:196)
 at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:775) at 
org.apache.spark.sql.execution.QueryExecution.executePhase(QueryExecution.scala:196)
 at 
org.apache.spark.sql.execution.QueryExecution.optimizedPlan$lzycompute(QueryExecution.scala:134)
 at 
org.apache.spark.sql.execution.QueryExecution.optimizedPlan(QueryExecution.scala:130)
 at 
org.apache.spark.sql.execution.QueryExecution.assertOptimized(QueryExecution.scala:148)
 at 
org.apache.spark.sql.execution.QueryExecution.$anonfun$executedPlan$1(QueryExecution.scala:166)
 at 
org.apache.spark.sql.execution.QueryExecution.withCteMap(QueryExecution.scala:73)
 at 
org.apache.spark.sql.execution.QueryExecution.executedPlan$lzycompute(QueryExecution.scala:163)
 at 
org.apache.spark.sql.execution.QueryExecution.executedPlan(QueryExecution.scala:163)
 at 
org.apache.spark.sql.execution.QueryExecution.simpleString(QueryExecution.scala:214)
 at 
org.apache.spark.sql.execution.QueryExecution.org$apache$spark$sql$execution$QueryExecution$$explainString(QueryExecution.scala:259)
 at 
org.apache.spark.sql.execution.QueryExecution.explainString(QueryExecution.scala:228)
 at 
org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$5(SQLExecution.scala:98)
 at 
org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:163)
 at 
org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:90)
 at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:775) at 
org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:64)
 at org.apache.spark.sql.Dataset.withAction(Dataset.scala:3731) at 
org.apache.spark.sql.Dataset.head(Dataset.scala:2755) at 
org.apache.spark.sql.Dataset.take(Dataset.scala:2962) at 
org.apache.spark.sql.Dataset.getRows(Dataset.scala:288) at 
org.apache.spark.sql.Dataset.showString(Dataset.scala:327) at 
org.apache.spark.sql.Dataset.show(Dataset.scala:807) at 
org.apache.spark.sql.Dataset.show(Dataset.scala:766) at 
org.apache.spark.sql.Dataset.show(Dataset.scala:775) at 
org.apache.spark.sql.jdbc.SimpleSuite.$anonfun$new$268(JDBCSuite.scala:3125) at 
scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23) at 
org.scalatest.OutcomeOf.outcomeOf(OutcomeOf.scala:85) at 
org.scalatest.OutcomeOf.outcomeOf$(OutcomeOf.scala:83) at 
org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104) at 
org.scalatest.Transformer.apply(Transformer.scala:22) at 
org.scalatest.Transformer.apply(Transformer.scala:20) at 
org.scalatest.funsuite.AnyFunSuiteLike$$anon$1.apply(AnyFunSuiteLike.scala:226) 
at org.apache.spark.SparkFunSuite.withFixture(SparkFunSuite.scala:190) at 
org.scalatest.funsuite.AnyFunSuiteLike.invokeWithFixture$1(AnyFunSuiteLike.scala:224)
 at 
org.scalatest.funsuite.AnyFunSuiteLike.$anonfun$runTest$1(AnyFunSuiteLike.scala:236)
 at org.scalatest.SuperEngine.runTestImpl(Engine.scala:306) at 
org.scalatest.funsuite.AnyFunSuiteLike.runTest(AnyFunSuiteLike.scala:236) at 
org.scalatest.funsuite.AnyFunSuiteLike.runTest$(AnyFunSuiteLike.scala:218) at 
org.apache.spark.SparkFunSuite.org$scalatest$BeforeAndAfterEach$$super$runTest(SparkFunSuite.scala:62)
 at org.scalatest.BeforeAndAfterEach.runTest(BeforeAndAfterEach.scala:234) at 
org.scalatest.BeforeAndAfterEach.runTest$(BeforeAndAfterEach.scala:227) at 
org.apache.spark.sql.jdbc.SimpleSuite.org$scalatest$BeforeAndAfter$$super$runTest(JDBCSuite.scala:2048)
 at org.scalatest.BeforeAndAfter.runTest(BeforeAndAfter.scala:213) at 
org.scalatest.BeforeAndAfter.runTest$(BeforeAndAfter.scala:203) at 
org.apache.spark.sql.jdbc.SimpleSuite.runTest(JDBCSuite.scala:2048) at 
org.scalatest.funsuite.AnyFunSuiteLike.$anonfun$runTests$1(AnyFunSuiteLike.scala:269)
 at org.scalatest.SuperEngine.$anonfun$runTestsInBranch$1(Engine.scala:413) at 
scala.collection.immutable.List.foreach(List.scala:431) at 
org.scalatest.SuperEngine.traverseSubNodes$1(Engine.scala:401) at 
org.scalatest.SuperEngine.runTestsInBranch(Engine.scala:396) at 
org.scalatest.SuperEngine.runTestsImpl(Engine.scala:475) at 
org.scalatest.funsuite.AnyFunSuiteLike.runTests(AnyFunSuiteLike.scala:269) at 
org.scalatest.funsuite.AnyFunSuiteLike.runTests$(AnyFunSuiteLike.scala:268) at 
org.scalatest.funsuite.AnyFunSuite.runTests(AnyFunSuite.scala:1563) at 
org.scalatest.Suite.run(Suite.scala:1112) at 
org.scalatest.Suite.run$(Suite.scala:1094) at 
org.scalatest.funsuite.AnyFunSuite.org$scalatest$funsuite$AnyFunSuiteLike$$super$run(AnyFunSuite.scala:1563)
 at 
org.scalatest.funsuite.AnyFunSuiteLike.$anonfun$run$1(AnyFunSuiteLike.scala:273)
 at org.scalatest.SuperEngine.runImpl(Engine.scala:535) at 
org.scalatest.funsuite.AnyFunSuiteLike.run(AnyFunSuiteLike.scala:273) at 
org.scalatest.funsuite.AnyFunSuiteLike.run$(AnyFunSuiteLike.scala:272) at 
org.apache.spark.SparkFunSuite.org$scalatest$BeforeAndAfterAll$$super$run(SparkFunSuite.scala:62)
 at org.scalatest.BeforeAndAfterAll.liftedTree1$1(BeforeAndAfterAll.scala:213) 
at org.scalatest.BeforeAndAfterAll.run(BeforeAndAfterAll.scala:210) at 
org.scalatest.BeforeAndAfterAll.run$(BeforeAndAfterAll.scala:208) at 
org.apache.spark.sql.jdbc.SimpleSuite.org$scalatest$BeforeAndAfter$$super$run(JDBCSuite.scala:2048)
 at org.scalatest.BeforeAndAfter.run(BeforeAndAfter.scala:273) at 
org.scalatest.BeforeAndAfter.run$(BeforeAndAfter.scala:271) at 
org.apache.spark.sql.jdbc.SimpleSuite.run(JDBCSuite.scala:2048) at 
org.scalatest.tools.SuiteRunner.run(SuiteRunner.scala:45) at 
org.scalatest.tools.Runner$.$anonfun$doRunRunRunDaDoRunRun$13(Runner.scala:1322)
 at 
org.scalatest.tools.Runner$.$anonfun$doRunRunRunDaDoRunRun$13$adapted(Runner.scala:1316)
 at scala.collection.immutable.List.foreach(List.scala:431) at 
org.scalatest.tools.Runner$.doRunRunRunDaDoRunRun(Runner.scala:1316) at 
org.scalatest.tools.Runner$.$anonfun$runOptionallyWithPassFailReporter$24(Runner.scala:993)
 at 
org.scalatest.tools.Runner$.$anonfun$runOptionallyWithPassFailReporter$24$adapted(Runner.scala:971)
 at 
org.scalatest.tools.Runner$.withClassLoaderAndDispatchReporter(Runner.scala:1482)
 at 
org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:971) 
at org.scalatest.tools.Runner$.run(Runner.scala:798) at 
org.scalatest.tools.Runner.run(Runner.scala) at 
org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.runScalaTest2(ScalaTestRunner.java:133)
 at 
org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.main(ScalaTestRunner.java:27){code}
 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

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

Reply via email to