如何设置 MEMORY_AND_DISK 标志以防止 Jupyter 中的 PySpark 出现内存不足错误?

How do I set MEMORY_AND_DISK flag to prevent out of memory error with PySpark in Jupyter?

我正在处理无法通过 PySpark 中的可用内存处理的大量数据,这导致内存不足错误。为此,我需要使用 MEMORY_AND_DISK 选项。

我的问题是:如何在 PySpark Jupyter Notebook 中启用此标志?

我正在寻找这样的东西:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .master('local[*]') \
    .config("spark.driver.memory", "15g") \
    .appName('voice-30') \
    .getOrCreate()

这就是我们设置驱动程序内存的方式。有没有类似的方法来为 PySpark 设置 DISK_AND_MEMORY 标志?

MEMORY_AND_DISKdefault storage level since Spark 2.0 用于持久化 Dataframe 或 RDD,用于多个操作,因此无需显式设置。但是,您遇到了 OOM 错误,因此为持久化 RDD 设置存储选项并不能解决您的问题。

来自 Spark FAQs 的注释:

Does my data need to fit in memory to use Spark?

No. Spark's operators spill data to disk if it does not fit in memory, allowing it to run well on any sized data. Likewise, cached datasets that do not fit in memory are either spilled to disk or recomputed on the fly when needed, as determined by the RDD's storage level.

因此,您的 OOM 错误是由于您的集群 运行 存储空间不足(内存和磁盘),因此您需要增加集群的资源(内存、磁盘和数字的一些排列节点数)。