我有一个独立的python脚本,可以通过调用以下代码行来创建SparkSession
,我可以看到它完全配置了spark-defaults.conf
文件中提到的spark会话。
spark = SparkSession.builder.appName("Tester").enableHiveSupport().getOrCreate()
如果我想作为参数传递,另一个包含我想要使用的火花配置而不是spark-default.conf
的文件,我如何在创建SparkSession
时指定它?
我可以看到我可以传递一个SparkConf
对象,但有没有办法从包含所有配置的文件中自动创建一个?
我是否必须手动解析输入文件并手动设置相应的配置?
答案 0 :(得分:3)
如果你不使用spark-submit
,那么你最好的就是覆盖SPARK_CONF_DIR
。为每个配置集创建单独的目录:
$ configs tree
.
├── conf1
│ ├── docker.properties
│ ├── fairscheduler.xml
│ ├── log4j.properties
│ ├── metrics.properties
│ ├── spark-defaults.conf
│ ├── spark-defaults.conf.template
│ └── spark-env.sh
└── conf2
├── docker.properties
├── fairscheduler.xml
├── log4j.properties
├── metrics.properties
├── spark-defaults.conf
├── spark-defaults.conf.template
└── spark-env.sh
在初始化任何依赖JVM的对象之前设置环境变量:
import os
from pyspark.sql import SparkSession
os.environ["SPARK_CONF_DIR"] = "/path/to/configs/conf1"
spark = SparkSession.builder.getOrCreate()
或
import os
from pyspark.sql import SparkSession
os.environ["SPARK_CONF_DIR"] = "/path/to/configs/conf2"
spark = SparkSession.builder.getOrCreate()
这是解决方法,可能无法在复杂的情况下使用。