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

How to detect Databricks environment programmatically

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

每个环境(文件路径)中的代码必须略有不同,因此我试图找到一种方法来检测作业是否在 Databricks 中 运行。到目前为止,我发现的最佳方法是在根目录中查找 "dbfs" 目录,如果存在,则假定它是 Databricks 上的 运行。感觉这不是正确的解决方案。有人有更好的主意吗?

你可以寻找spark配置环境变量如"spark.home"和值为/databricks/spark

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

结果: '/databricks/spark'

这个怎么样:

Python:

def isLocal():
    setting = spark.conf.get("spark.master")
    return ("local" in setting)

斯卡拉:

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

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

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

这个很简单。 Databricks 笔记本不是文件。

# If it is a file...
try:
    __file__
    print("It is a file")
except NameError:
    print("It is a Databricks notebook")