如何在交互式 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 属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PySpark 中连接到 Presto JDBC?

如何在条件下在pyspark上创建一个新列?

如何使用 java 连接到 spark-shell 并执行 hive 查询

在非 Spark 环境中加载 pyspark ML 模型

使用 Pyspark / Dataframes 时,如何将谓词下推到 Cassandra 或限制请求的数据?

在 pySpark (2.3) 中读取本地 csv 文件