尝试根据此类条件创建包含多个附加列的火花数据框
df
.withColumn("name1", someCondition1)
.withColumn("name2", someCondition2)
.withColumn("name3", someCondition3)
.withColumn("name4", someCondition4)
.withColumn("name5", someCondition5)
.withColumn("name6", someCondition6)
.withColumn("name7", someCondition7)
如果添加了超过6个.withColumn
子句,我将面临以下异常
org.codehaus.janino.JaninoRuntimeException: Code of method "()V" of class "org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator" grows beyond 64 KB
此问题也已在其他地方报道,例如。
我可以在spark中配置属性吗?
如果创建更多列,例如在20左右,我不再收到上述异常,而是在等待5分钟后得到以下错误:
java.lang.OutOfMemoryError: GC overhead limit exceeded
我想要执行的是拼写/纠错。一些简单的案例可以通过地图&在UDF中替换。尽管如此,其他几个具有多种链条条件的案例仍然存在。
我也会跟进:https://issues.apache.org/jira/browse/SPARK-18532
这里可以找到一个可重现性最小的例子https://gist.github.com/geoHeil/86e5401fc57351c70fd49047c88cea05
答案 0 :(得分:2)
此错误是由WholeStageCodegen和JVM问题引起的。
快速回答:不,你不能改变限制。请查看this问题,64KB是JVM中的最大方法大小。
我们必须等待Spark中的解决方法,目前您无法在系统参数中进行任何更改