【问题标题】:Moving a Pyspark project development form Databricks UI to VSCode using databricks connect使用 Databricks 连接将 Pyspark 项目开发形式从 Databricks UI 移动到 VSCode
【发布时间】:2023-01-07 20:38:28
【问题描述】:

我继承了一个巨大的 pyspark 项目,而不是使用 Databricks UI 进行开发,我想通过 databricks-connect 使用 vscode。因此,我无法确定以下方面的最佳做法:

  • 因为项目文件在 repos 中保存为 .py,所以当我使用 VSCode 打开它们时,它无法识别 databricks 魔术命令,如运行。所以我无法运行任何使用%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)
    

更改整个代码库以适应我首选的开发策略似乎是不合理的。关于如何规避此问题的任何指示?

【问题讨论】:

标签: visual-studio-code pyspark databricks databricks-connect


【解决方案1】:

只想提一下,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 会话的调用,在这种情况下,您只能在单元测试中实例化它(我建议使用 @987654329 @package 以简化它),然后其余代码将不需要 SparkSession.builder.getOrCreate(),因为它将在将实例化它的 Databricks 上运行(如果您使用笔记本作为入口点)。 dbutils 的问题也可以解决,如answer 中所述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多