是否有可能在PySpark中获取当前的spark上下文设置?

whi*_*eam 54 config apache-spark pyspark

我正试图找到spark.worker.dir当前的道路sparkcontext.

如果我明确地将其设置为a config param,我可以将其读回来SparkConf,但无论如何都要config使用PySpark?来访问完整的(包括所有默认值)?

jav*_*dba 71

是的: sc._conf.getAll()

哪个使用方法:

SparkConf.getAll()
Run Code Online (Sandbox Code Playgroud)

如访问

SparkContext.sc._conf
Run Code Online (Sandbox Code Playgroud)

注意下划线:这使得这很棘手.我不得不看一下火花源代码来弄明白;)

但它确实有效:

In [4]: sc._conf.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')]
Run Code Online (Sandbox Code Playgroud)

  • 另请注意,下划线意味着程序包开发人员认为访问此数据元素不是一个好主意. (6认同)
  • 这个答案被编辑为使用`.getConf`而不是`._conf`,这使得关于“注意下划线...”的部分不再有意义。 (4认同)
  • "请注意,只会显示通过spark-defaults.conf,SparkConf或命令行显式指定的值.对于所有其他配置属性,您可以假设使用默认值." (参见https://spark.apache.org/docs/latest/configuration.html#viewing-spark-properties) (2认同)

Kev*_*vad 62

Spark 2.1+

spark.sparkContext.getConf().getAll()spark你在哪里sparksession(给你一个dict所有配置的设置)

  • 对于 spark 2.4.0,它返回一个元组列表而不是一个字典 (2认同)

ece*_*ena 28

Spark 1.6+

sc.getConf.getAll.foreach(println)
Run Code Online (Sandbox Code Playgroud)

  • 1.6.3:>>> sc.getConf.getAll.foreach(println)AttributeError:'SparkContext'对象没有属性'getConf' (2认同)

bob*_*bob 17

更新Spark 2.3.1中的配置

要更改默认的spark配置,您可以按照以下步骤操作:

导入所需的类

from pyspark.conf import SparkConf
from pyspark.sql import SparkSession
Run Code Online (Sandbox Code Playgroud)

获取默认配置

spark.sparkContext._conf.getAll()
Run Code Online (Sandbox Code Playgroud)

更新默认配置

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')])
Run Code Online (Sandbox Code Playgroud)

停止当前的Spark会话

spark.sparkContext.stop()
Run Code Online (Sandbox Code Playgroud)

创建Spark会话

spark = SparkSession.builder.config(conf=conf).getOrCreate()
Run Code Online (Sandbox Code Playgroud)


asm*_*ier 10

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

SparkContext:

for item in sorted(sc._conf.getAll()): print(item)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

环境变量:

import os
for item in sorted(os.environ.items()): print(item)
Run Code Online (Sandbox Code Playgroud)


小智 10

简单地运行

sc.getConf().getAll()
Run Code Online (Sandbox Code Playgroud)

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


xua*_*yue 7

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

spark.conf.getAll; //spark as spark session 
Run Code Online (Sandbox Code Playgroud)


DGr*_*ady 7

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

  • Spark 应用程序的 Web UI(通常位于http://<driver>:4040)有一个带有属性值表的“环境”选项卡。
  • SparkContext保持隐藏参考其在PySpark配置和构造提供了getAll方法,包括:spark.sparkContext._conf.getAll()
  • Spark SQL 提供SET将返回属性值表命令spark.sql("SET").toPandas(). 您还可以使用SET -v包含属性描述的列。

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


and*_*nes 5

您可以使用:

sc.sparkContext.getConf.getAll
Run Code Online (Sandbox Code Playgroud)

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

logger.info(sc.sparkContext.getConf.getAll.mkString("\n"))
Run Code Online (Sandbox Code Playgroud)