如何为SparkSession使用自定义配置文件(不使用spark-submit提交应用程序)?

Sub*_*ian 5 apache-spark pyspark

我有一个独立的python脚本,可以SparkSession通过调用以下代码行来创建一个,并且可以看到它按照spark-defaults.conf文件中所述完美地配置了spark会话。

spark = SparkSession.builder.appName("Tester").enableHiveSupport().getOrCreate()
Run Code Online (Sandbox Code Playgroud)

如果要作为参数传递,则包含另一个要使用的火花配置而不是的文件spark-default.conf,如何在创建SparkSession?时指定呢?

我可以看到可以传递一个SparkConf对象,但是有没有一种方法可以从包含所有配置的文件中自动创建一个对象呢?

我是否必须手动解析输入文件并手动设置适当的配置?

hi-*_*zir 5

如果你不尽力而为,spark-submit那就是压倒一切的SPARK_CONF_DIR。为每个配置集创建单独的目录:

\n\n
$ configs tree           \n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 conf1\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docker.properties\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 fairscheduler.xml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 log4j.properties\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 metrics.properties\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 spark-defaults.conf\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 spark-defaults.conf.template\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 spark-env.sh\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 conf2\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docker.properties\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 fairscheduler.xml\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 log4j.properties\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 metrics.properties\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 spark-defaults.conf\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 spark-defaults.conf.template\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 spark-env.sh\n
Run Code Online (Sandbox Code Playgroud)\n\n

并在初始化任何 JVM 相关对象之前设置环境变量:

\n\n
import os\nfrom pyspark.sql import SparkSession\n\nos.environ["SPARK_CONF_DIR"] = "/path/to/configs/conf1"\nspark  = SparkSession.builder.getOrCreate()\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
import os\nfrom pyspark.sql import SparkSession\n\nos.environ["SPARK_CONF_DIR"] = "/path/to/configs/conf2"\nspark  = SparkSession.builder.getOrCreate()\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是解决方法,在复杂的场景中可能不起作用。

\n