如何在交互式PySpark会话中更改SparkContext属性

16

我如何在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'
3个回答

11

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。有关更多详细信息,请参见此答案:https://dev59.com/yFQJ5IYBdhLWcg3wimk1#62799033 - Michał Jabłoński

10

所看到的情况是SparkConf不是一个Java对象,这是因为它尝试将SparkConf用作第一个参数,如果您改用sc=SparkContext(conf=conf),则应该会使用您的配置。话虽如此,您可能最好只启动常规Python程序,而不是停止默认的Spark上下文并重新启动它,但无论如何,您都需要使用命名参数技术来传递配置对象。


谢谢,我刚刚错过了它。 - MARK
当我第一次看到时,我也是这样的(不幸的是,在Python中,我们无法像在Scala中那样轻松地执行相同类型的技巧,除非我们添加一些非常丑陋的代码,否则很难匹配API)。 - Holden

6
要对给定的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,只需使用以下代码:


```python sc.stop() ```
SparkContext.stop(sc)

如果您想要确认当前设置的内容,可以使用以下命令:

sc._conf.getAll()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接