在Databricks中导入笔记本电脑



我正在使用databricks连接和VS代码为databricks开发一些python代码。

我想使用databricks连接直接从VS code编写代码并运行/测试所有内容,以避免处理databricks web IDE。对于基本的笔记本电脑,它工作得很好,但我希望对多个笔记本电脑也这样做,并使用导入(例如,在另一个笔记本电脑中使用import config-notebook)。

然而,在VS代码中,import another-notebook运行良好,但在Databricks中不起作用。据我所知,Databricks中的替代方案是%run "another-notebook",但如果我想从VS Code运行它,它就不起作用(Databricks连接不包括笔记本工作流程)。

有没有任何方法可以使笔记本电脑导入既在Databricks中工作,又受Databricks连接支持?

非常感谢你的回答!

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

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

# 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笔记本中的Magic命令。这样,无论脚本是通过databricks连接在Python中执行,还是在databricks中执行,它都会起作用。

如如何将一个databricks笔记本导入另一个?

导入笔记本电脑的唯一方法是使用run命令:

run /Shared/MyNotebook

或相对路径:

%run ./MyNotebook

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

我能想到的唯一方法是编写使用importrun的条件代码,这取决于它在哪里运行。

类似于:

try:
import another-notebook
print("running in VS Code")
except ImportError:
code = """
%run "another-notebook"
print("running in Databricks")
"""
exec(code)

如果你想对环境更加确定,也许你可以使用上下文中的一些信息。例如,以下代码

for a in spark.sparkContext.__dict__:
print(a, getattr(spark.sparkContext, a))

在我的集群打印中运行:

_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

例如,你的情况可能是:

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

好吧,你可以创建包。在集群中安装whl(轮子)并在任何笔记本中通过导入进行调用是一个简单的

最新更新