我正在尝试获取当前 sparkcontext
的 spark.worker.dir
路径。
如果我将它明确设置为 config param
,我可以从 SparkConf
中读取它,但无论如何可以使用 PySpark
访问完整的 config
(包括所有默认值)?
SparkConf
获得(它们在源代码中被硬编码)。 spark.worker.dir
听起来像是 Worker 守护程序的配置,而不是您的应用程序会看到的东西。
spark.default.parallelism
的值。它位于 sc.defaultParallelism
。可以在 PySpark 中执行 dir(sc)
以查看 sc
中可用的内容。
火花 2.1+
spark.sparkContext.getConf().getAll()
其中 spark
是您的 sparksession
(为您提供具有所有配置设置的 dict
)
是: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')]
error: variable _conf in class SparkContext cannot be accessed in org.apache.spark.SparkContext
- 这就是 Spark-shell 在 Spark 2.4 中的答案。自答案以来,这个变量是否已私有化?
.getConf
而不是 ._conf
,这使得关于“注意下划线...”的部分不再有意义。
火花 1.6+
sc.getConf.getAll.foreach(println)
sc.getConf.getAll.foreach(println)
并且它对我来说很好(在 Scala 中) - 也许语法不适用于 Python?
在 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 环境和配置的完整概述,我发现以下代码片段很有用:
火花上下文:
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)
简单地运行
sc.getConf().getAll()
应该给你一个包含所有设置的列表。
不幸的是,不,2.3.1 版的 Spark 平台不提供任何方法来在运行时以编程方式访问每个属性的值。它提供了几种方法来访问通过配置文件(如 spark-defaults.conf
)显式设置、在创建会话时通过 SparkConf
对象设置或在提交作业时通过命令行设置的属性值,但是这些方法都不会显示未明确设置的属性的默认值。为了完整起见,最好的选择是:
Spark 应用程序的 Web UI,通常位于 http://
SparkContext 在 PySpark 中保留了对其配置的隐藏引用,并且配置提供了一个 getAll 方法:spark.sparkContext._conf.getAll()。
Spark SQL 提供了 SET 命令,它将返回一个属性值表:spark.sql("SET").toPandas()。您还可以使用 SET -v 来包含带有属性描述的列。
(这三种方法都在我的集群上返回相同的数据。)
对于 Spark 2+,您也可以在使用 scala 时使用
spark.conf.getAll; //spark as spark session
您可以使用:
sc.sparkContext.getConf.getAll
例如,我的 Spark 程序顶部经常有以下内容:
logger.info(sc.sparkContext.getConf.getAll.mkString("\n"))
只是为了记录类似的java版本:
Tuple2<String, String> sc[] = sparkConf.getAll();
for (int i = 0; i < sc.length; i++) {
System.out.println(sc[i]);
}
不确定您是否可以轻松获得所有默认设置,但特别是对于工作目录,它非常简单:
from pyspark import SparkFiles
print SparkFiles.getRootDirectory()
假设我想在运行时使用 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
希望这可以帮助
如果您想查看数据块中的配置,请使用以下命令
spark.sparkContext._conf.getAll()
我建议您尝试以下方法以获取当前的火花上下文设置。
SparkConf.getAll()
访问者
SparkContext.sc._conf
获取专门针对 Spark 2.1+ 的默认配置
spark.sparkContext.getConf().getAll()
停止当前 Spark 会话
spark.sparkContext.stop()
创建 Spark 会话
spark = SparkSession.builder.config(conf=conf).getOrCreate()
不定期副业成功案例分享
spark.sparkContext.getConf().getAll()
spark - SparkSession sparkContext - (因为我们已经拥有来自版本 2.0+ 的 SparkSession 这个 sparkContext 意味着什么)你能帮忙吗我对此有更深入的了解?tuples
而不是dict