如何在交互式 PySpark 会话中更改 SparkContext 属性
Posted
技术标签:
【中文标题】如何在交互式 PySpark 会话中更改 SparkContext 属性【英文标题】:How to change SparkContext properties in Interactive PySpark session 【发布时间】:2015-09-02 20:45:44 【问题描述】:如何在 pyspark 交互式 shell 中更改 spark.driver.maxResultSize?我使用了以下代码
from pyspark import SparkConf, SparkContext
conf = (SparkConf()
.set("spark.driver.maxResultSize", "10g"))
sc.stop()
sc=SparkContext(conf)
但它给了我错误
AttributeError: 'SparkConf' object has no attribute '_get_object_id'
【问题讨论】:
【参考方案1】:所以你看到SparkConf
不是一个java 对象,这是因为它试图使用SparkConf
作为第一个参数,如果你这样做sc=SparkContext(conf=conf)
它应该使用你的配置。话虽这么说,你可能最好只启动一个常规的 python 程序,而不是停止默认的 spark 上下文并重新启动它,但是你需要使用命名参数技术来传递 conf 对象。
【讨论】:
谢谢,我只是错过了 当我第一次看的时候我也是这样(不幸的是,我们不能在 Python 中轻松地做与在 Scala 中相同的类型技巧,因为它很难匹配 API,除非我们添加一些非常丑陋的代码)。【参考方案2】:在 Spark 2.3.1
中更新配置要更改默认 spark 配置,您可以按照以下步骤操作:
导入所需的类
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()
【讨论】:
这将不会更新spark.driver.memory
。有关详细信息,请参阅此答案:***.com/a/62799033/5140049【参考方案3】:
在线修改给定 Spark 上下文的 spark 设置的正确方法需要关闭上下文。例如:
from pyspark import SparkContext
SparkContext.setSystemProperty('spark.driver.maxResultSize', '10g')
sc = SparkContext("local", "App Name")
来源:https://spark.apache.org/docs/0.8.1/python-programming-guide.html
附言如果您需要关闭 SparkContext,只需使用:
SparkContext.stop(sc)
并仔细检查您可以使用的当前设置:
sc._conf.getAll()
【讨论】:
以上是关于如何在交互式 PySpark 会话中更改 SparkContext 属性的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 java 连接到 spark-shell 并执行 hive 查询