ChatGPT解决这个技术问题 Extra ChatGPT

是否可以在 PySpark 中获取当前的火花上下文设置?

我正在尝试获取当前 sparkcontextspark.worker.dir 路径。

如果我将它明确设置为 config param,我可以从 SparkConf 中读取它,但无论如何可以使用 PySpark 访问完整的 config(包括所有默认值)?

不——你可以得到 conf 对象,但不能得到你要找的东西。默认值不能通过 SparkConf 获得(它们在源代码中被硬编码)。 spark.worker.dir 听起来像是 Worker 守护程序的配置,而不是您的应用程序会看到的东西。
我的回答直接解决了您的问题:请提供反馈
登陆这里试图找出 spark.default.parallelism 的值。它位于 sc.defaultParallelism。可以在 PySpark 中执行 dir(sc) 以查看 sc 中可用的内容。

K
Kevad

火花 2.1+

spark.sparkContext.getConf().getAll() 其中 spark 是您的 sparksession(为您提供具有所有配置设置的 dict


@hhantyal 没有。当问题被问到时,没有 spark2.1。最佳答案适用于所有版本的火花,尤其是旧版本
对于 spark 2.4.0,它返回一个元组列表而不是一个字典
@Kevad 我们使用的是 Spark 2.4,所以请您对以下代码进行一些说明spark.sparkContext.getConf().getAll() spark - SparkSession sparkContext - (因为我们已经拥有来自版本 2.0+ 的 SparkSession 这个 sparkContext 意味着什么)你能帮忙吗我对此有更深入的了解?
返回 tuples 而不是 dict
我认为这个语句也不会返回所有的 hadoop 配置。
S
Sairam Krish

是:sc.getConf().getAll()

其中使用的方法:

SparkConf.getAll()

访问者

SparkContext.sc.getConf()

但它确实有效:

In [4]: sc.getConf().getAll()
Out[4]:
[(u'spark.master', u'local'),
 (u'spark.rdd.compress', u'True'),
 (u'spark.serializer.objectStreamReset', u'100'),
 (u'spark.app.name', u'PySparkShell')]

另请注意,下划线表示包开发人员认为访问此数据元素不是一个好主意。
“请注意,只有通过 spark-defaults.conf、SparkConf 或命令行明确指定的值才会出现。对于所有其他配置属性,您可以假设使用默认值。” (见spark.apache.org/docs/latest/…
@asmaier 知道如何让这些不出现的内容出现在 python 中,而无需访问网页?例如,我如何获得“spark.default.parallelism”的值?
error: variable _conf in class SparkContext cannot be accessed in org.apache.spark.SparkContext - 这就是 Spark-shell 在 Spark 2.4 中的答案。自答案以来,这个变量是否已私有化?
这个答案被编辑为使用 .getConf 而不是 ._conf,这使得关于“注意下划线...”的部分不再有意义。
e
ecesena

火花 1.6+

sc.getConf.getAll.foreach(println)

1.6.3: >>> sc.getConf.getAll.foreach(println) AttributeError: 'SparkContext' 对象没有属性 'getConf'
@dovka - 我使用了与@ecesena 建议的相同的 sc.getConf.getAll.foreach(println) 并且它对我来说很好(在 Scala 中) - 也许语法不适用于 Python?
如您在此处看到的,不在 pyspark 1.6.0 中:spark.apache.org/docs/1.6.0/api/python/…
b
bob

在 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.sparkContext._conf.getAll() 那么您如何使用该结果更新配置并包含新设置。我认为这将是您答案的一个很好的补充。
@PaulVelthuis:要包含新设置,您需要使用更新的配置重新启动 spark 上下文。它在那里回答,在更新 conf 后,我们停止了上下文并重新开始使用新的 conf。
a
asmaier

有关 Spark 环境和配置的完整概述,我发现以下代码片段很有用:

火花上下文:

for item in sorted(sc._conf.getAll()): print(item)

Hadoop配置:

hadoopConf = {}
iterator = sc._jsc.hadoopConfiguration().iterator()
while iterator.hasNext():
    prop = iterator.next()
    hadoopConf[prop.getKey()] = prop.getValue()
for item in sorted(hadoopConf.items()): print(item)

环境变量:

import os
for item in sorted(os.environ.items()): print(item)

D
David C.

简单地运行

sc.getConf().getAll()

应该给你一个包含所有设置的列表。


D
DGrady

不幸的是,不,2.3.1 版的 Spark 平台不提供任何方法来在运行时以编程方式访问每个属性的值。它提供了几种方法来访问通过配置文件(如 spark-defaults.conf)显式设置、在创建会话时通过 SparkConf 对象设置或在提交作业时通过命令行设置的属性值,但是这些方法都不会显示未明确设置的属性的默认值。为了完整起见,最好的选择是:

Spark 应用程序的 Web UI,通常位于 http://:4040,有一个带有属性值表的“环境”选项卡。

SparkContext 在 PySpark 中保留了对其配置的隐藏引用,并且配置提供了一个 getAll 方法:spark.sparkContext._conf.getAll()。

Spark SQL 提供了 SET 命令,它将返回一个属性值表:spark.sql("SET").toPandas()。您还可以使用 SET -v 来包含带有属性描述的列。

(这三种方法都在我的集群上返回相同的数据。)


x
xuanyue

对于 Spark 2+,您也可以在使用 scala 时使用

spark.conf.getAll; //spark as spark session 

M
Mehdi LAMRANI

您可以使用:

sc.sparkContext.getConf.getAll

例如,我的 Spark 程序顶部经常有以下内容:

logger.info(sc.sparkContext.getConf.getAll.mkString("\n"))

A
Aydin K.

只是为了记录类似的java版本:

Tuple2<String, String> sc[] = sparkConf.getAll();
for (int i = 0; i < sc.length; i++) {
    System.out.println(sc[i]);
}

w
whisperstream

不确定您是否可以轻松获得所有默认设置,但特别是对于工作目录,它非常简单:

from pyspark import SparkFiles
print SparkFiles.getRootDirectory()

S
Subash

假设我想在运行时使用 Spark Session 增加驱动程序内存:

s2 = SparkSession.builder.config("spark.driver.memory", "29g").getOrCreate()

现在我想查看更新的设置:

s2.conf.get("spark.driver.memory")

要获取所有设置,您可以使用 spark.sparkContext._conf.getAll()

https://i.stack.imgur.com/eDGx1.jpg

希望这可以帮助


C
Code run

如果您想查看数据块中的配置,请使用以下命令

spark.sparkContext._conf.getAll()

A
Amir Maleki

我建议您尝试以下方法以获取当前的火花上下文设置。

SparkConf.getAll()

访问者

SparkContext.sc._conf

获取专门针对 Spark 2.1+ 的默认配置

spark.sparkContext.getConf().getAll() 

停止当前 Spark 会话

spark.sparkContext.stop()

创建 Spark 会话

spark = SparkSession.builder.config(conf=conf).getOrCreate()