【问题标题】:topandas() using pyarrow returns empty dataframe使用 pyarrow 的 topandas() 返回空数据框
【发布时间】:2021-02-04 15:47:05
【问题描述】:
我有一个包含 500 万行和 250 列的 spark 数据框。当我使用"spark.sql.execution.arrow.enabled" 将此数据帧topandas() 转换为"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,我找不到任何在线资源,这没什么帮助
【问题讨论】:
标签:
python
pandas
pyspark
apache-spark-sql
pyarrow
【解决方案1】:
好的,这个问题与内存有关,因为在将 spark 数据帧转换为 pandas 数据帧 spark (Py4j) 时必须通过 throw 消耗大量内存的收集,所以我建议你做的是在创建 spark 会话时只是重新配置内存,这里是一个例子:
from pyspark import SparkContext
SparkContext.setSystemProperty('spark.executor.memory', '16g')
sc = SparkContext("local", "stack_over_flow")
继续使用 sc(火花上下文)或火花会话,如你所愿
如果这不起作用,则可能是版本冲突,因此请检查这些选项:
-从您使用 Python 的位置设置环境变量 ARROW_PRE_0_15_IPC_FORMAT=1
- 暂时降级到 pyarrow
如果您可以共享您的脚本,那就更清楚了