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

时间:2018-02-07 09:54:20

标签: apache-spark pyspark

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

spark = SparkSession.builder.appName("Tester").enableHiveSupport().getOrCreate()

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

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

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

1 个答案:

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

这是解决方法,可能无法在复杂的情况下使用。