首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Databricks中导入笔记本

在Databricks中导入笔记本
EN

Stack Overflow用户
提问于 2021-10-19 15:10:03
回答 2查看 797关注 0票数 1

我正在使用databricks-connect和VS Code为Databricks开发一些python代码。

我想使用databricks-connect直接从VS code中编码和运行/测试所有东西,以避免与Databricks web IDE打交道。对于基本的笔记本,它工作得很好,但我想对多个笔记本做同样的事情,并使用导入(例如,在另一个笔记本中使用import config-notebook )。

然而,在VS代码中,import another-notebook工作得很好,但在数据库中却不起作用。据我所知,Databricks中的替代方案是%run "another-notebook",但如果我想从VS Code中运行它,它就不起作用(databricks-connect不包括notebook工作流)。

有没有办法让notebook导入既能在Databricks中工作,又能被databricks-connect支持?

非常感谢你的回答!

EN

回答 2

Stack Overflow用户

发布于 2021-10-20 14:24:19

我找到了一个解决方案,用try ... except完成了@Kashyap提到的部分。

包含%run命令的笔记本的python文件应该如下所示:

代码语言:javascript
复制
# Databricks notebook source
# MAGIC %run "another-notebook"

# COMMAND ----------

try:
    import another-notebook
except ModuleNotFoundError:
    print("running on Databricks")

import standard-python-lib

# Some very interesting code

# MAGIC %run在Python语言中执行时避免使用SyntaxError,并告诉Databricks这是Python中的一个神奇命令。这样,无论脚本是通过databricks-connect在Python中执行还是在Databricks中执行,都可以正常工作。

票数 1
EN

Stack Overflow用户

发布于 2021-10-19 20:43:00

How to import one databricks notebook into another?中所述

运行/共享/MyNotebook

或相对路径:

%run./MyNotebook

更多细节:https://docs.azuredatabricks.net/user-guide/notebooks/notebook-workflows.html

我能想到的唯一方法是编写条件代码,根据它运行的位置使用importrun

类似于:

代码语言:javascript
复制
try:
    import another-notebook
    print("running in VS Code")
except ImportError:
    code = """
%run "another-notebook"
print("running in Databricks")
"""
    exec(code)

如果您想对环境有更多的了解,也许您可以使用上下文中的一些信息。例如下面的代码

代码语言:javascript
复制
for a in spark.sparkContext.__dict__:
  print(a, getattr(spark.sparkContext, a))

在我的集群中运行打印:

代码语言:javascript
复制
_accumulatorServer <pyspark.accumulators.AccumulatorServer object at 0x7f678d944cd0>
_batchSize 0
_callsite CallSite(function='__init__', file='/databricks/python_shell/scripts/PythonShellImpl.py', linenum=1569)
_conf <pyspark.conf.SparkConf object at 0x7f678d944c40>
_encryption_enabled False
_javaAccumulator PythonAccumulatorV2(id: 0, name: None, value: [])
_jsc org.apache.spark.api.java.JavaSparkContext@838f1fd
_pickled_broadcast_vars <pyspark.broadcast.BroadcastPickleRegistry object at 0x7f678e699c40>
_python_includes []
_repr_html_ <function apply_spark_ui_patch.<locals>.get_patched_repr_html_.<locals>.patched_repr_html_ at 0x7f678e6a54c0>
_temp_dir /local_disk0/spark-fd8657a8-79a1-4fb0-b6fc-c68763f0fcd5/pyspark-3718c30e-c265-4e68-9a23-b003f4532576
_unbatched_serializer PickleSerializer()
appName Databricks Shell
environment {'PYTHONHASHSEED': '0'}
master spark://10.2.2.8:7077
profiler_collector None
pythonExec /databricks/python/bin/python
pythonVer 3.8
serializer AutoBatchedSerializer(PickleSerializer())
sparkHome /databricks/spark

因此,例如,您的条件可能是:

代码语言:javascript
复制
if spark.sparkContext.appName.contains("Databricks"):
    code = """
%run "another-notebook"
print("running in Databricks")
"""
    exec(code)
else:
    import another-notebook
    print("running in VS Code")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69633404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档