SparkConf 不读取 spark-submit 参数

SparkConf not reading spark-submit arguments

pyspark 上的

SparkConf 不读取传递给 spark-submit.

的配置参数

我的 python 代码类似于

from pyspark import SparkContext, SparkConf

conf = SparkConf().setAppName("foo")
sc = SparkContext(conf=conf)

# processing code...

sc.stop()

我用

提交
PYSPARK_PYTHON="/opt/anaconda/bin/python" spark-submit foo.py \
--master local[4] --conf="spark.driver.memory=16g" --executor-memory 16g

但应用了 none 个配置参数。也就是说,应用程序的执行默认值为 local[*] master,驱动程序内存为 1g,执行程序内存为 1g。 Spark GUI 证实了这一点。

但是,如果我使用 pyspark 提交应用程序,则遵循配置参数:

PYSPARK_PYTHON="/opt/anaconda/bin/python" pyspark --master local[4] \
--conf="spark.driver.memory=8g"

请注意,--executor-memory 16g 也已更改为 --conf="spark.executor.memory=16g",因为前者也不起作用。

我做错了什么?

我认为您需要从 --conf= 中删除 = 符号。您的 spark-submit 脚本应该是

PYSPARK_PYTHON="/opt/anaconda/bin/python" spark-submit foo.py \
--master local[4] --conf spark.driver.memory=16g --executor-memory 16g

请注意,spark-submit 还支持使用标志 --driver-memory 16G

设置驱动程序内存

显然,参数的顺序很重要。最后一个参数应该是 python 脚本的名称。所以,电话应该是

PYSPARK_PYTHON="/opt/anaconda/bin/python" spark-submit \
    --master local[4] --conf="spark.driver.memory=16g" --executor-memory 16g foo.py 

或者,按照@glennie-helles-sindholt 的建议,

PYSPARK_PYTHON="/opt/anaconda/bin/python" spark-submit \
    --master local[4] --driver-memory 16g --executor-memory 16g foo.py