[ 
https://issues.apache.org/jira/browse/SPARK-18016?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16348980#comment-16348980
 ] 

Kazuaki Ishizaki commented on SPARK-18016:
------------------------------------------

This issue has been fixed in Spark 2.3 or master. It is necessary to use newer 
versions.

According to the log file, the exception occurs as follows:
{code:java}
...
at 
org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator$.org$apache$spark$sql$catalyst$expressions$codegen$CodeGenerator$$doCompile(CodeGenerator.scala:957)
at 
org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator$$anon$1.load(CodeGenerator.scala:1014)
at 
org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator$$anon$1.load(CodeGenerator.scala:1011)
at 
org.spark_project.guava.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3599)
...{code}

CodeGenerator.scala in Spark 2.2 has doCompile() around [line 
950|https://github.com/apache/spark/blob/branch-2.2/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala#L950-L960].
 On the other hand, CodeGenerator.scala in master has doCompile() around [line 
1380|https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala#L1370-L1390].
Could you please double-check the latest jar files are used?

> Code Generation: Constant Pool Past Limit for Wide/Nested Dataset
> -----------------------------------------------------------------
>
>                 Key: SPARK-18016
>                 URL: https://issues.apache.org/jira/browse/SPARK-18016
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 2.1.0
>            Reporter: Aleksander Eskilson
>            Assignee: Kazuaki Ishizaki
>            Priority: Major
>             Fix For: 2.3.0
>
>         Attachments: 910825_9.zip
>
>
> When attempting to encode collections of large Java objects to Datasets 
> having very wide or deeply nested schemas, code generation can fail, yielding:
> {code}
> Caused by: org.codehaus.janino.JaninoRuntimeException: Constant pool for 
> class 
> org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificUnsafeProjection
>  has grown past JVM limit of 0xFFFF
>       at 
> org.codehaus.janino.util.ClassFile.addToConstantPool(ClassFile.java:499)
>       at 
> org.codehaus.janino.util.ClassFile.addConstantNameAndTypeInfo(ClassFile.java:439)
>       at 
> org.codehaus.janino.util.ClassFile.addConstantMethodrefInfo(ClassFile.java:358)
>       at 
> org.codehaus.janino.UnitCompiler.writeConstantMethodrefInfo(UnitCompiler.java:11114)
>       at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java:4547)
>       at org.codehaus.janino.UnitCompiler.access$7500(UnitCompiler.java:206)
>       at 
> org.codehaus.janino.UnitCompiler$12.visitMethodInvocation(UnitCompiler.java:3774)
>       at 
> org.codehaus.janino.UnitCompiler$12.visitMethodInvocation(UnitCompiler.java:3762)
>       at org.codehaus.janino.Java$MethodInvocation.accept(Java.java:4328)
>       at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java:3762)
>       at 
> org.codehaus.janino.UnitCompiler.compileGetValue(UnitCompiler.java:4933)
>       at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:3180)
>       at org.codehaus.janino.UnitCompiler.access$5000(UnitCompiler.java:206)
>       at 
> org.codehaus.janino.UnitCompiler$9.visitMethodInvocation(UnitCompiler.java:3151)
>       at 
> org.codehaus.janino.UnitCompiler$9.visitMethodInvocation(UnitCompiler.java:3139)
>       at org.codehaus.janino.Java$MethodInvocation.accept(Java.java:4328)
>       at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:3139)
>       at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:2112)
>       at org.codehaus.janino.UnitCompiler.access$1700(UnitCompiler.java:206)
>       at 
> org.codehaus.janino.UnitCompiler$6.visitExpressionStatement(UnitCompiler.java:1377)
>       at 
> org.codehaus.janino.UnitCompiler$6.visitExpressionStatement(UnitCompiler.java:1370)
>       at org.codehaus.janino.Java$ExpressionStatement.accept(Java.java:2558)
>       at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:1370)
>       at 
> org.codehaus.janino.UnitCompiler.compileStatements(UnitCompiler.java:1450)
>       at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:2811)
>       at 
> org.codehaus.janino.UnitCompiler.compileDeclaredMethods(UnitCompiler.java:1262)
>       at 
> org.codehaus.janino.UnitCompiler.compileDeclaredMethods(UnitCompiler.java:1234)
>       at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:538)
>       at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:890)
>       at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:894)
>       at org.codehaus.janino.UnitCompiler.access$600(UnitCompiler.java:206)
>       at 
> org.codehaus.janino.UnitCompiler$2.visitMemberClassDeclaration(UnitCompiler.java:377)
>       at 
> org.codehaus.janino.UnitCompiler$2.visitMemberClassDeclaration(UnitCompiler.java:369)
>       at 
> org.codehaus.janino.Java$MemberClassDeclaration.accept(Java.java:1128)
>       at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:369)
>       at 
> org.codehaus.janino.UnitCompiler.compileDeclaredMemberTypes(UnitCompiler.java:1209)
>       at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:564)
>       at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:420)
>       at org.codehaus.janino.UnitCompiler.access$400(UnitCompiler.java:206)
>       at 
> org.codehaus.janino.UnitCompiler$2.visitPackageMemberClassDeclaration(UnitCompiler.java:374)
>       at 
> org.codehaus.janino.UnitCompiler$2.visitPackageMemberClassDeclaration(UnitCompiler.java:369)
>       at 
> org.codehaus.janino.Java$AbstractPackageMemberClassDeclaration.accept(Java.java:1309)
>       at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:369)
>       at org.codehaus.janino.UnitCompiler.compileUnit(UnitCompiler.java:345)
>       at 
> org.codehaus.janino.SimpleCompiler.compileToClassLoader(SimpleCompiler.java:396)
>       at 
> org.codehaus.janino.ClassBodyEvaluator.compileToClass(ClassBodyEvaluator.java:311)
>       at 
> org.codehaus.janino.ClassBodyEvaluator.cook(ClassBodyEvaluator.java:229)
>       at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:196)
>       at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:91)
>       at 
> org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator$.org$apache$spark$sql$catalyst$expressions$codegen$CodeGenerator$$doCompile(CodeGenerator.scala:905)
>       ... 35 more
> {code}
> During generation of the code for SpecificUnsafeProjection, all the mutable 
> variables are declared up front. If there are too many, it seems it perhaps 
> exceeds some type of resource limit.
> This issue seems related to (but is not fixed by) SPARK-17702, which itself 
> was about the size of individual methods growing beyond the 64 KB limit. 
> SPARK-17702 was resolved by breaking extractions into smaller methods, but 
> does not seem to have resolved this issue.
> I've created a small project [1] where I declare a list of "wide" and 
> "nested" Bean objects that I attempt to encode to a Dataset. This code can 
> trigger the failure for Spark 2.1.0-SNAPSHOT. 
> [1] - https://github.com/bdrillard/spark-codegen-error



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@spark.apache.org
For additional commands, e-mail: issues-h...@spark.apache.org

Reply via email to