当可以在 RDBMS 中使用 UDF 时,为什么 pandas/R/etc 在数据科学家或分析师的工作流程中如此普遍?

数据挖掘 r 数据挖掘 熊猫 matlab 数据库
2022-02-16 11:00:03

分析师在使用 RDBMS 时似乎很常见这种工作流程:使用 SQL 从数据库中获取数据子集,将其导出或使用连接器,然后对其应用数据挖掘/模型算法(例如 kNN、回归模型等)使用诸如 Pandas、R 或 Matlab 之类的东西。换句话说,一个人在 DBMS 内部运行,然后在它之外运行。

可以使用用户定义函数 (UDF) 在多种语言中实现选择算法(使用例如 PostgreSQL 在 C 中构建 UDF)并在 DBMS 环境中保持操作,即不放弃在内部操作所获得的好处数据库管理系统。此外,还可以将 UDF 与 SQL 构造无缝集成,如果需要对通过模型的数据执行后续 SQL 操作,这将非常强大。

我想知道在 DBMS 之外运行的原因是什么,因为这样的功能是可用的,而且具有讽刺意味的是,DBMS 擅长管理数据(由多年的研究支持)。

还有其他讨论似乎得出结论,SQL 用于预处理,Pandas 用于数据分析;澄清一下,我是在这个结论的基础上建立的:当 DBMS 也非常适合数据分析时,为什么事情会以这种方式结束?

3个回答

我想答案可能是这样的:

Python 与 R 和 SQL 之间的主要区别在于第一个是图灵完备的。

如果可以证明给定的编程语言在计算上等同于图灵机,则称该编程语言是图灵完备的。

也就是说,任何可以在图灵机上使用有限资源(即时间和磁带)解决的问题,都可以用另一种语言使用有限资源来解决。

通常,通过提供将任何给定的图灵机程序翻译成相关语言的等效程序的方法来证明给定的语言是图灵完备的。或者,可以提供另一种语言的翻译方案,一种已经被证明是图灵完备的。

几乎所有现有的计算机语言都是图灵完备的。大约唯一不是图灵完备的计算机语言是少数几种比图灵机能力更少的特殊语言——通常是因为某些限制“硬连线”到语言的结构或定义中。(例如,Hofstadter 设计了一种名为 BlooP 的语言,因此它不可能有一个具有任意上限的迭代结构。)

图灵完备性定义

您的问题是:为什么我们不使用 SQL(或其他 DBMS)来完成所有数据科学过程?答案是因为 SQL 语言在某些方面受到限制,而 Python 和 R 则不受限制。其中一个方面是数据科学的关键:递归。

想象一下没有递归的决策树及其所有变体!他们是不可能的!

SQL 图灵完备吗?

在我看来有多种原因,但我会将答案缩小到几个:

  1. 架构:DBMS 通常不是进行严肃计算的地方。通常它是应用程序服务器的角色,并且有一些可用的解决方案可以轻松扩展此类架构。因此,分析和模型是在计算技术所在的应用服务器中计算的。

  2. 这源于 1) 一点:有许多不同的 DBMS 服务器,因此要普及数据分析框架,它们应该尽可能多地与 DBMS 无关(甚至与数据源无关)。在这里发挥作用的是关注点的分离。想象一下,如果你在 PostgreSQL 服务器上放置一个线性回归算法的实现,然后想在 MySQL 上使用它会发生什么。您需要进行一些认真的移植并最终维护相同算法的两个实现。但是,如果您突然将实现从 DBMS 移开,您只需维护一个不关心数据来自哪里的实现。

  3. 当你把它放到 DBMS 中时,你就限制了自己可以用来实际实现算法的技术数量。有比纯 C 更方便的语言来实现这样的解决方案。

我想说,如果您担心执行速度快,以可维护性、可移植性和可扩展性为代价,那么将其放在 DBMS 上可能是值得考虑的事情。

对于在重复模式的基础上提取 RDBS 的分析数据科学家来说,请人来编写 UDF 是一个绝妙的主意。

对于企业雇用的分析数据科学家来说,“请问,您能否将这 30,000 个 C 和 Fortran 库实现为 UDF”,这可能不是提升职业生涯的举措。