尝试根据这样的条件创建具有多个附加列的 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 ML Pipeline 导致 java.lang.Exception:编译失败...代码...增长超过 64 KB https://stackoverflow.com/questions/39012073/spark-ml-pipeline-causes-java-lang-exception-failed-to-compile-code-gro
- https://github.com/rstudio/sparklyr/issues/264 https://github.com/rstudio/sparklyr/issues/264
Spark 中有可以配置大小的属性吗?
edit
如果创建更多列,例如大约 20 我不再收到上述异常,而是在等待 5 分钟后收到以下错误:
java.lang.OutOfMemoryError: GC overhead limit exceeded
我想要执行的是拼写/纠错。一些简单的情况可以通过 UDF 中的映射和替换轻松处理。尽管如此,其他几起具有多重连锁条件的案件仍然存在。
我也会跟进那里:https://issues.apache.org/jira/browse/SPARK-18532 https://issues.apache.org/jira/browse/SPARK-18532
可以在这里找到最小的可重复示例https://gist.github.com/geoHeil/86e5401fc57351c70fd49047c88cea05 https://gist.github.com/geoHeil/86e5401fc57351c70fd49047c88cea05