如何扩展在 Windows 10 / JVM 64bit 上本地运行的 PySpark 的内存限制

我尝试在 Jupyter Notebook 中进行 PySpark 操作,当它因错误消息而停止时,似乎存在(相当低的)工作内存阈值。笔记本电脑有 16GB RAM(运行脚本时其中 50% 是空闲的),所以物理内存应该不是问题。 Spark 在 JVM(64 位)1.8.0_301 上运行。 Jupyter Notebook 在 Python 3.9.5 上运行。

数据框仅包含 360K 行和两个“长”类型的列(即仅约 3.8MB)。如果我将数据帧的大小减少 1.5MB 内存使用量(49,200 行),脚本将正常工作。但在此之上,脚本会使用 df.toPandas() 命令崩溃,并显示以下错误消息(摘录):

Py4JJavaError: An error occurred while calling o234.collectToPython.
: org.apache.spark.SparkException: Job aborted due to stage failure: 
Task 0 in stage 50.0 failed 1 times,most recent failure: 
Lost task 0.0 in stage 50.0 (TID 577) (BEXXXXXX.subdomain.domain.com executor driver): 
TaskResultLost (result lost from block manager)

这是 PySpark 遇到内存限制时的 well known error message,因此我尝试如下调整设置:

%SPARK_HOME%/conf/spark-defaults.conf 文件中:

spark.driver.memory                4g

在 Jupyter 笔记本中:

spark = SparkSession.builder\
    .config("spark.driver.memory","4G")\
    .config("spark.driver.maxResultSize","4G")\
    .appName("MyApp")\
    .getOrCreate()
spark.sparkContext.setLogLevel("ERROR")
spark.sparkContext.setSystemProperty('spark.executor.memory','4G')

我尝试使用 spark.driver.memory、spark.executor.memory 等的值,但阈值似乎保持不变。

Spark 面板(在 http://localhost:4040 上)在 Executors 菜单中说,存储内存为 603 KiB / 2 GiB,输入为 4.1 GiB,随机读取:60.6 MiB,随机写入:111.3 MiB。但这本质上是一样的,如果我将数据帧大小减少到 1.5MB 以下并且脚本运行正常。

你有什么想法,如何以某种方式提高这个 1.5MB 内存限制,它来自哪里?

qqqboyqqq 回答:如何扩展在 Windows 10 / JVM 64bit 上本地运行的 PySpark 的内存限制

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/4136.html

大家都在问