问题描述
我有一个具有500万行和250列的spark数据框。当我使用topandas()
作为"spark.sql.execution.arrow.enabled"
对此数据帧进行"true"
转换时,它将返回仅包含列的空数据帧。
禁用pyarrow时出现以下错误
Py4JJavaError: An error occurred while calling o124.collectToPython. : java.lang.OutOfMemoryError: GC overhead limit exceeded
是否可以通过增加某种内存分配来执行此操作?
除了https://issues.apache.org/jira/browse/SPARK-28881之外,我找不到其他在线资源,
解决方法
好吧,这个问题与内存有关,因为在将spark数据帧转换为pandas数据帧时,spark(Py4j)必须通过throw消耗大量内存的收集,所以我建议您做的是在创建spark会话时只需重新配置内存,这里是一个示例:
from pyspark import SparkContext
SparkContext.setSystemProperty('spark.executor.memory','16g')
sc = SparkContext("local","stack_over_flow")
根据需要继续使用sc(火花上下文)或spark会话
如果这不起作用,则可能是版本冲突,因此请检查以下选项:
-在使用Python的位置设置环境变量ARROW_PRE_0_15_IPC_FORMAT = 1
-现在降级到pyarrow
如果您可以共享脚本,它将更加清晰