如何以编程方式检测Databricks环境

24

我正在编写一个需要在本地和Databricks上运行的Spark作业。

由于每个环境中的代码略有不同(文件路径),因此我正试图找到一种方法来检测作业是否在Databricks上运行。目前我发现最好的方法是在根目录中查找“dbfs”目录,如果有则假设它正在Databricks上运行。但这不像是正确的解决方法。请问是否有更好的建议?


2
在 Databricks 上运行时设置一个环境变量?而在本地运行时则设置另一个或不设置,类似于开发/生产分离。 - DTul
你能传递诸如profile这样的参数吗?在Databricks上是集群模式吗? - howie
@steven35 你会将它构建为jar包,并通过 spark-submit 作业运行吗? - Sai
4个回答

24

您可以简单地检查环境变量是否存在,例如:

def isRunningInDatabricks(): Boolean = 
  sys.env.contains("DATABRICKS_RUNTIME_VERSION")

10
在Python中,该条件将为"DATABRICKS_RUNTIME_VERSION" in os.environ - DarkHark

3
这个怎么样:
Python:
def isLocal():
    setting = spark.conf.get("spark.master")
    return ("local" in setting)

Scala:
def isLocal(): Boolean = {
    val setting = spark.conf.get("spark.master")
    return ("local" contains setting)
}

我在Azure DBS China上得到了'local[*]'。 - hsc

1
你可以查找Spark配置环境变量,例如"spark.home"和值为/databricks/spark

python: sc._conf.get("spark.home")

结果:

'/databricks/spark'


2
这是一个不错的方法,但我需要知道它是否首先在Databricks上运行的原因是为了相应地创建配置和上下文。 - steven35

1
这很简单。Databricks笔记本不是文件。
# If it is a file...
try:
    __file__
    print("It is a file")
except NameError:
    print("It is a Databricks notebook")


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接