【问题标题】:How to detect Databricks environment programmatically如何以编程方式检测 Databricks 环境
【发布时间】:2018-12-22 01:44:43
【问题描述】:

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

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

【问题讨论】:

  • 在 Databricks 上运行时设置环境变量?而不是/另一个在本地运行时?类似于开发/生产分离。
  • 你能传递参数这样的配置文件吗?在 Databricks 上是集群模式吗?
  • @steven35 你会将它构建为 jar 并通过spark-submit 作业运行它吗?

标签: java apache-spark databricks


【解决方案1】:

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

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

【讨论】:

  • 在 Python 中,条件为"DATABRICKS_RUNTIME_VERSION" in os.environ
【解决方案2】:

这个怎么样:

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)
}

【讨论】:

  • 我在 azure dbs china 上获得了 'local[*]'。
【解决方案3】:

您可以查找 spark 配置环境变量,例如 "spark.home",其值为 /databricks/spark

蟒蛇: sc._conf.get("spark.home")

结果: '/databricks/spark'

【讨论】:

  • 这是一个好方法,但我首先需要知道它是否在 Databricks 上运行的原因是我可以相应地创建配置和上下文。
【解决方案4】:

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

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

【讨论】:

    猜你喜欢
    • 2011-10-21
    • 2021-03-24
    • 2019-03-24
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 2011-02-16
    • 2013-06-28
    相关资源
    最近更新 更多