什么是好的Databricks工作流程

时间:2019-11-12 16:00:53

标签: azure azure-databricks

我正在使用Azure Databricks通过笔记本和管道进行数据处理。

我对当前的工作流程不满意:

  • 在不中断生产的情况下,无法修改生产中使用的笔记本。当我想开发更新时,我复制笔记本,更改源代码直到满意为止,然后用新笔记本替换生产笔记本。
  • 我的浏览器不是IDE!我不能轻易转到函数定义。我有很多笔记本,如果要修改甚至只是看功能文档,我需要切换到定义此功能的笔记本。
  • 有没有办法进行有效且系统的测试?
  • Git集成非常简单,但这不是我主要关心的问题。

3 个答案:

答案 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

  1. 列表项
  2. 在桌面上安装pyspark
  3. 下载一些匿名数据以供使用
  4. 使用少量数据开发代码,编写单元测试
  5. 准备测试大数据时,请卸载pyspark,安装databricks-connect
  6. 当性能和集成足够时,将代码推送到您的远程仓库中
  7. 创建运行自动化测试的构建管道,并构建版本化的软件包
  8. 创建一个发布管道,将版本化的软件包复制到DBFS
  9. 在“跑步笔记本”中,将“ process_date”和“ data folder / filepath”作为参数,并从版本包中导入模块
  10. 将参数传递给模块以运行经过测试的代码

答案 2 :(得分:0)

我们的工作方式-

-将Dev笔记本与Azure DevOps集成。

-为笔记本,作业,程序包和群集部署创建自定义的构建和部署任务。使用DatabBricks RestAPI可以轻松做到这一点

https://docs.databricks.com/dev-tools/api/latest/index.html

为测试,登台和生产部署创建发布管道。 -部署测试和测试。 -部署和测试。 -在生产环境中部署

希望这会有所帮助。