使用数据块连接将Pyspark项目开发从数据块UI移动到VSCode

cgfeq70w  于 2023-01-08  发布在  Spark
关注(0)|答案(1)|浏览(127)

我继承了一个巨大的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)

改变整个代码库以适应我的首选开发策略似乎是不合理的。有什么建议可以让我绕过这个问题吗?

bzzcjhmw

bzzcjhmw1#

只想提一下,Databricks Connect处于维护模式,将在今年晚些时候更换为新的解决方案。
但实际上,迁移到VSCode并不需要数据库连接。这里有几个选项:

  • 使用dbx tool进行本地代码开发,这样您就可以在本地运行单元测试,并且Databricks. dbx上的集成测试/作业包括dbx init命令,该命令可以生成项目的框架,该框架具有推荐的目录结构和用于单元/集成测试、CI/CD管道等的代码框架。
  • 使用Databricks Repos切换到我所说的“混合开发”--它包括允许将Repos中的Python文件用作普通Python包的功能,因此您可以避免使用%run,而只执行普通Python导入。您还可以使用dbx sync命令使用Repos进行本地开发,该命令将您的本地更改复制到Repos,因此您可以在VSCode中进行更改。也许运行单元测试,然后执行笔记本中修改过的代码。

关于spark的使用-在您的代码中,特别是您可以将其替换为SparkSession.getActiveSession()调用,该调用将从环境中拉取活动的Spark会话,在本例中,只能在单元测试中示例化它(我建议使用pytest-spark包来简化它),然后其余代码将不需要SparkSession.builder.getOrCreate(),因为它将在示例化它的数据块上运行(如果你使用笔记本作为切入点)。dbutils的问题也是可以解决的,就像这个答案中描述的那样。

相关问题