Apache spark 如何根据条件添加新列(而不面临JaninRuntimeException或OutOfMemoryError)?

Apache spark 如何根据条件添加新列(而不面临JaninRuntimeException或OutOfMemoryError)?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,尝试基于以下条件创建具有多个附加列的spark数据框 df .withColumn("name1", someCondition1) .withColumn("name2", someCondition2) .withColumn("name3", someCondition3) .withColumn("name4", someCondition4) .withColumn("name5", someCondition5) .withColumn

尝试基于以下条件创建具有多个附加列的spark数据框

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
我要执行的是拼写/错误更正。一些简单的案例可以通过自定义项框架中的映射和替换轻松处理。尽管如此,仍然存在其他几种具有多个链接条件的情况

我亦会跟进:


在这里可以找到一个最小的可重复性示例

此错误是由整个tagecodegen和JVM问题引起的

快速回答:不,你不能改变限制。请看这个问题,64KB是JVM中的最大方法大小

我们必须等待Spark中的解决方案,目前系统参数中没有可以更改的内容