为了编写一个独立的脚本,我想直接从Python启动并配置Spark上下文。 使用PySpark的脚本,我可以设置驱动程序的内存大小:
$ /opt/spark-1.6.1/bin/pyspark
... INFO MemoryStore: MemoryStore started with capacity 511.5 MB ...
$ /opt/spark-1.6.1/bin/pyspark --conf spark.driver.memory=10g
... INFO MemoryStore: MemoryStore started with capacity 7.0 GB ...
但是,当从Python模块启动上下文时,无法设置驱动程序的内存大小:
$ export SPARK_HOME=/opt/spark-1.6.1
$ export PYTHONPATH=$PYTHONPATH:$SPARK_HOME/python
$ python
>>> from pyspark import SparkConf, SparkContext
>>> sc = SparkContext(conf=SparkConf().set('spark.driver.memory', '10g'))
... INFO MemoryStore: MemoryStore started with capacity 511.5 MB ...
我知道的唯一解决方案是在sparks-default.conf
中设置spark.driver.memory
,这是不令人满意的。
正如this post中所解释的,Java/Scala在JVM启动后不能更改驱动程序的内存大小是有意义的。
在导入pyspark
模块之前或导入时,是否有办法从Python动态配置它?
您可以使用--driver memory标志通过spark submit命令传递它。
在shell脚本或其他脚本中使用上述命令,而不是20(手动设置的驱动程序内存)有一个可以动态更改的变量。
我也有同样的问题,只是想出了一个老生常谈的办法。结果there is an existing answer采用了相同的方法。但我要解释它为什么有效。
如您所知,无法设置驱动程序内存after the JVM starts。但是当创建SparkContext时,pyspark通过calling spark-submit and passing in pyspark-shell as the command启动JVM
注意
PYSPARK_SUBMIT_ARGS
环境变量。这些是上下文将发送给spark-submit
命令的参数。因此只要在实例化新的
SparkContext
之前设置PYSPARK_SUBMIT_ARGS="--driver-memory=2g pyspark-shell"
,驱动程序内存设置就应该生效。有多种方法可以设置此环境变量,请参阅我之前为一个方法链接的答案。像现在这样使用conf是没有意义的。 尝试将此序言添加到代码中:
相关问题 更多 >
编程相关推荐