我正在使用Azure Databricks通过笔记本和管道进行数据处理。
我对当前的工作流程不满意:
答案 0 :(得分:1)
很好的问题。绝对不要修改您的生产代码。
一种推荐的模式是在工作区中为dev-staging-prod保留单独的文件夹。做您的开发工作,然后在逐步升级到生产之前进行阶段测试。
您可以使用Databricks CLI将笔记本从一个文件夹拉入另一个文件夹,而不会破坏现有代码。更进一步,您可以将此模式与git合并以与版本控制同步。在任何一种情况下,CLI均允许您以编程方式访问工作区,这将使更新生产作业的代码更加容易。
关于IDE的第二点-Databricks提供了Databricks Connect,可让您在集群上运行命令时使用IDE。根据您的痛点,我认为这对您来说是一个很好的解决方案,因为它可以使您更加直观地了解已定义的功能,等等。您也可以通过这种方式编写和运行单元测试。
一旦准备好运行脚本,就可以始终将它们作为笔记本导入到工作区中并作为作业运行。还知道您可以使用REST API将.py脚本作为作业运行。
答案 1 :(得分:1)
我个人更喜欢打包我的代码,然后将* .whl包复制到DBFS,在那里我可以安装经过测试的包并将其导入。
编辑:更加明确。
在不中断生产的情况下,无法修改生产中使用的笔记本。当我想开发更新时,我复制笔记本,更改源代码,直到满意为止,然后用新笔记本替换生产笔记本。
这可以通过使用单独的环境DEV / TST / PRD来解决。或具有可以单独修改的版本化软件包。我待会儿澄清。
我的浏览器不是IDE!我不能轻易转到函数定义。我有很多笔记本,如果要修改甚至只是看功能文档,我需要切换到定义此功能的笔记本。 有没有办法进行有效且系统的测试?
是的,使用我提到的版本化软件包方法与databricks-connect结合使用,您完全可以使用IDE,实施测试并具有适当的git集成。
Git集成非常简单,但这不是我主要关心的问题。
在较大的团队中工作时,内置git集成实际上非常差。您不能同时在同一个笔记本中进行开发,因为与同事共享的变化是平坦而线性的。除此之外,您还必须链接和取消链接容易发生人为错误的存储库,从而导致笔记本电脑在错误的文件夹中同步,导致运行中断,因为笔记本电脑无法导入。我建议您也使用我的包装解决方案。
包装解决方案的工作方式如下Reference:
答案 2 :(得分:0)
我们的工作方式-
-将Dev笔记本与Azure DevOps集成。
-为笔记本,作业,程序包和群集部署创建自定义的构建和部署任务。使用DatabBricks RestAPI可以轻松做到这一点
https://docs.databricks.com/dev-tools/api/latest/index.html
为测试,登台和生产部署创建发布管道。 -部署测试和测试。 -部署和测试。 -在生产环境中部署
希望这会有所帮助。