如何以编程方式检测 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")
我正在编写一个需要在本地和 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")