我正在尝试覆盖spark会话/ spark上下文默认配置,但它正在挑选整个节点/群集资源。
spark = SparkSession.builder
.master("ip")
.enableHiveSupport()
.getOrCreate()
spark.conf.set("spark.executor.memory", '8g')
spark.conf.set('spark.executor.cores', '3')
spark.conf.set('spark.cores.max', '3')
spark.conf.set("spark.driver.memory",'8g')
sc = spark.sparkContext
当我将配置放入spark submit
时,它工作正常spark-submit --master ip --executor-cores=3 --diver 10G code.py
答案 0 :(得分:23)
您实际上并未使用此代码覆盖任何内容。只是这样你可以亲自看看,尝试以下方法。
一旦启动pyspark shell类型:
sc.getConf().getAll()
这将显示所有当前配置设置。然后尝试您的代码并再次执行。什么都没有改变。
您应该做的是创建一个新配置并使用它来创建SparkContext。这样做:
conf = pyspark.SparkConf().setAll([('spark.executor.memory', '8g'), ('spark.executor.cores', '3'), ('spark.cores.max', '3'), ('spark.driver.memory','8g')])
sc.stop()
sc = pyspark.SparkContext(conf=conf)
然后你可以像上面一样检查自己:
sc.getConf().getAll()
这应该反映您想要的配置。
答案 1 :(得分:16)
更新 Spark 2.3.1
中的配置要更改默认的火花配置,您可以按照以下步骤操作:
导入所需的课程
from pyspark.conf import SparkConf
from pyspark.sql import SparkSession
获取默认配置
spark.sparkContext._conf.getAll()
更新默认配置
conf = spark.sparkContext._conf.setAll([('spark.executor.memory', '4g'), ('spark.app.name', 'Spark Updated Conf'), ('spark.executor.cores', '4'), ('spark.cores.max', '4'), ('spark.driver.memory','4g')])
停止当前的Spark会话
spark.sparkContext.stop()
创建Spark会话
spark = SparkSession.builder.config(conf=conf).getOrCreate()
答案 2 :(得分:0)
在配置中将'spark.driver.host'设置为'localhost'对我有用
spark = SparkSession \
.builder \
.appName("MyApp") \
.config("spark.driver.host", "localhost") \
.getOrCreate()
答案 3 :(得分:0)
您还可以在启动pyspark时设置配置,就像spark-submit一样:
pyspark --conf property=value
这里是一个例子
-bash-4.2$ pyspark
Python 3.6.8 (default, Apr 25 2019, 21:02:35)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/__ / .__/\_,_/_/ /_/\_\ version 2.4.0-cdh6.2.0
/_/
Using Python version 3.6.8 (default, Apr 25 2019 21:02:35)
SparkSession available as 'spark'.
>>> spark.conf.get('spark.eventLog.enabled')
'true'
>>> exit()
-bash-4.2$ pyspark --conf spark.eventLog.enabled=false
Python 3.6.8 (default, Apr 25 2019, 21:02:35)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/__ / .__/\_,_/_/ /_/\_\ version 2.4.0-cdh6.2.0
/_/
Using Python version 3.6.8 (default, Apr 25 2019 21:02:35)
SparkSession available as 'spark'.
>>> spark.conf.get('spark.eventLog.enabled')
'false'
答案 4 :(得分:0)
我有一个非常不同的要求,我必须检查是否要获取执行程序和驱动程序内存大小的参数,如果要获取,则必须仅更改执行程序和驱动程序来替换config。步骤如下:
from pyspark.conf import SparkConf
from pyspark.sql import SparkSession
spark = (SparkSession.builder
.master("yarn")
.appName("experiment")
.config("spark.hadoop.fs.s3a.multiobjectdelete.enable", "false")
.getOrCreate())
conf = spark.sparkContext._conf.getAll()
if executor_mem is not None and driver_mem is not None:
conf = spark.sparkContext._conf.setAll([('spark.executor.memory',executor_mem),('spark.driver.memory',driver_mem)])
spark.sparkContext.stop()
spark = SparkSession.builder.config(conf=conf).getOrCreate()
else:
spark = spark
别忘了停止spark上下文,这将确保在传递参数时,执行程序和驱动程序的内存大小有所不同。希望这会有所帮助!