我正在做一个机器学习的应用(使用pycharm),一切工作都很正常。
但当我决定改变'HandlInvalid'参数时,spark会抛出这个java堆错误。
Exception in thread "dispatcher-event-loop-1" java.lang.OutOfMemoryError: Java heap space
.....
.....
ERROR Utils: Uncaught exception in thread driver-heartbeater
java.lang.OutOfMemoryError: Java heap space
.....
.....
py4j.protocol.Py4JJavaError: An error occurred while calling o6473.fit.
: java.lang.OutOfMemoryError: Java heap space
当我尝试改变driver.memory时,我得到这个错误。
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Invalid maximum heap size: -Xmx5g
The specified size exceeds the maximum representable size.
这是我的spark会话。
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('Ope inp').master('local')\
.config("spark.driver.memory", "5g")\
.enableHiveSupport().getOrCreate()
引自apache.spark.config。
注意:在客户端模式下,这个配置不能直接在你的应用程序中通过SparkConf来设置,因为此时驱动JVM已经启动了。相反,请通过--driver-memory命令行选项或在你的默认属性文件中进行设置。
我怎么能设置 驱动程序.memroy 和 执行器.内存 配置在文件属性中,这样我就不用每次调试程序时都要设置它们了。
我想明白了。
这个问题的解决要归功于64位的JVM.首先我运行的是32位的JVM,它不允许限制堆大小的特定参数。
要弄清楚你有哪种JVM,请尝试第二个答案[]。https:/stackoverflow.coma20622637096004][1] 。