首页 > 解决方案 > 如何:Pyspark 数据帧持久使用和回读

问题描述

我对 pyspark 很陌生,我遇到以下错误:

Py4JJavaError: An error occurred while calling o517.showString.我读过这是由于内存不足:
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded

所以,我一直在读到这种情况的转机是使用df.persist()和然后再次阅读持久化的df,所以我想知道:

我对此真的很陌生,所以请尽量解释清楚。

我正在使用 jupyter-notebooks(anaconda) 在本地机器(8GB ram)上运行;Windows 7的; 爪哇 8; 蟒蛇3.7.1;pyspark v2.4.3

标签: pythondataframecachingpysparkpersist

解决方案


Spark 是惰性评估框架,因此,在您调用action之前,不会调用任何转换,例如:join 。

所以继续你所做的

from pyspark import StorageLevel
    for col in columns:
       df_AA = df_AA.join(df_B, df_AA[col] == 'some_value', 'outer')
    df_AA.persist(StorageLevel.MEMORY_AND_DISK)
    df_AA.show()

有多个持久化选项可用,因此选择MEMORY_AND_DISK会将无法在内存中处理的数据溢出到 DISK。

此外,GC 错误可能是为 Spark 应用程序运行提供的驱动程序内存较少的结果。


推荐阅读