我继承了一个巨大的pyspark项目,我希望通过databricks-connect使用vscode,而不是使用Databricks UI进行开发。因此,我无法确定以下方面的最佳实践:
- 因为项目文件在repos中保存为.py,当我使用VSCode打开它们时,它不能识别像Run这样的数据块神奇命令。所以我不能运行任何使用
%run ./PATH/TO-ANOTHER-FILE
调用另一个笔记本的单元格。将文件更改为。ipynb或将调用更改为dbutils.notebook.run
将解决这个问题,但这将意味着更改近20个笔记本中的单元格。使用dbutils也带来了下一个挑战。 - 由于databricks在后台为您创建spark会话,因此在databricks UI中编码时无需使用
spark = SparkSession.builder.getOrCreate()
。但在使用databricks connect时,您必须手动创建一个连接到远程集群的SparkSession。这意味着要使用dbutils,我必须执行以下操作:
from pyspark.dbutils import DBUtils
dbutils = DBUtils(spark)
改变整个代码库以适应我的首选开发策略似乎是不合理的。有什么建议可以让我绕过这个问题吗?
1条答案
按热度按时间bzzcjhmw1#
只想提一下,Databricks Connect处于维护模式,将在今年晚些时候更换为新的解决方案。
但实际上,迁移到VSCode并不需要数据库连接。这里有几个选项:
dbx init
命令,该命令可以生成项目的框架,该框架具有推荐的目录结构和用于单元/集成测试、CI/CD管道等的代码框架。%run
,而只执行普通Python导入。您还可以使用dbx sync
命令使用Repos进行本地开发,该命令将您的本地更改复制到Repos,因此您可以在VSCode中进行更改。也许运行单元测试,然后执行笔记本中修改过的代码。关于
spark
的使用-在您的代码中,特别是您可以将其替换为SparkSession.getActiveSession()
调用,该调用将从环境中拉取活动的Spark会话,在本例中,只能在单元测试中示例化它(我建议使用pytest-spark
包来简化它),然后其余代码将不需要SparkSession.builder.getOrCreate()
,因为它将在示例化它的数据块上运行(如果你使用笔记本作为切入点)。dbutils
的问题也是可以解决的,就像这个答案中描述的那样。