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

Is it possible to get the current spark context settings in PySpark?

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

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

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

from pyspark import SparkFiles
print SparkFiles.getRootDirectory()

是: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')]

您可以使用:

sc.sparkContext.getConf.getAll

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

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

Spark 1.6+

sc.getConf.getAll.foreach(println)

仅供记录,类似的 java 版本:

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

Spark 2.1+

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

为了全面了解您的 Spark 环境和配置,我发现以下代码片段很有用:

SparkContext:

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)

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

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

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()

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

  • Spark 应用程序的网站 UI,通常位于 http://<driver>:4040,有一个“环境”选项卡,其 属性 值为 table。
  • SparkContext在PySpark中保留对其配置的隐藏引用,配置提供getAll方法:spark.sparkContext._conf.getAll().
  • Spark SQL 提供 the SET command,它将 return table 个 属性 值:spark.sql("SET").toPandas()。您还可以使用 SET -v 来包含包含 属性 描述的列。

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

简直运行

sc.getConf().getAll()

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

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

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

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

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

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

希望对您有所帮助

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

spark.sparkContext._conf.getAll()

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

SparkConf.getAll()

访问者

SparkContext.sc._conf

获取 Spark 2.1+ 的默认配置

spark.sparkContext.getConf().getAll() 

停止当前的 Spark 会话

spark.sparkContext.stop()

创建 Spark 会话

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