当前位置:首页 >> 脚本专栏

用于ETL的Python数据转换工具详解

ETL的考虑  

    做 数据仓库系统,ETL是关键的一环。说大了,ETL是数据整合解决方案,说小了,就是倒数据的工具。回忆一下工作这么些年来,处理数据迁移、转换的工作倒 还真的不少。但是那些工作基本上是一次性工作或者很小数据量,使用access、DTS或是自己编个小程序搞定。可是在数据仓库系统中,ETL上升到了一 定的理论高度,和原来小打小闹的工具使用不同了。究竟什么不同,从名字上就可以看到,人家已经将倒数据的过程分成3个步骤,E、T、L分别代表抽取、转换 和装载。

    其 实ETL过程就是数据流动的过程,从不同的数据源流向不同的目标数据。但在数据仓库中,ETL有几个特点,一是数据同步,它不是一次性倒完数据就拉到,它 是经常性的活动,按照固定周期运行的,甚至现在还有人提出了实时ETL的概念。二是数据量,一般都是巨大的,值得你将数据流动的过程拆分成E、T和L。
    现 在有很多成熟的工具提供ETL功能,例如datastage、powermart等,且不说他们的好坏。从应用角度来说,ETL的过程其实不是非常复杂, 这些工具给数据仓库工程带来和很大的便利性,特别是开发的便利和维护的便利。但另一方面,开发人员容易迷失在这些工具中。举个例子,VB是一种非常简单的 语言并且也是非常易用的编程工具,上手特别快,但是真正VB的高手有多少?微软设计的产品通常有个原则是"将使用者当作傻瓜",在这个原则下,微软的东西 确实非常好用,但是对于开发者,如果你自己也将自己当作傻瓜,那就真的傻了。ETL工具也是一样,这些工具为我们提供图形化界面,让我们将主要的精力放在 规则上,以期提高开发效率。从使用效果来说,确实使用这些工具能够非常快速地构建一个job来处理某个数据,不过从整体来看,并不见得他的整体效率会高多 少。问题主要不是出在工具上,而是在设计、开发人员上。他们迷失在工具中,没有去探求ETL的本质。 

    可 以说这些工具应用了这么长时间,在这么多项目、环境中应用,它必然有它成功之处,它必定体现了ETL的本质。如果我们不透过表面这些工具的简单使用去看它 背后蕴涵的思想,最终我们作出来的东西也就是一个个独立的job,将他们整合起来仍然有巨大的工作量。大家都知道“理论与实践相结合”,如果在一个领域有 所超越,必须要在理论水平上达到一定的高度。

下面看下用于ETL的Python数据转换工具,具体内容如下所示:

前几天,我去Reddit询问是否应该将Python用于ETL相关的转换,并且压倒性的回答是"是"。

用于ETL的Python数据转换工具详解

但是,尽管我的Redditor同事热心支持使用Python,但他们建议研究Pandas以外的库-出于对大型数据集Pandas性能的担忧。

经过研究,我发现了很多用于数据转换的Python库:有些改进了Pandas的性能,而另一些提供了自己的解决方案。

我找不到这些工具的完整列表,所以我想我可以使用所做的研究来编译一个工具-如果我错过了什么或弄错了什么,请告诉我!

Pandas

网站:https://pandas.pydata.org/

总览

Pandas当然不需要介绍,但是我还是给它一个介绍。

Pandas在Python中增加了DataFrame的概念,并在数据科学界广泛用于分析和清理数据集。 它作为ETL转换工具非常有用,因为它使操作数据非常容易和直观。

优点

  • 广泛用于数据处理
  • 简单直观的语法
  • 与其他Python工具(包括可视化库)良好集成
  • 支持常见的数据格式(从SQL数据库,CSV文件等读取)

缺点

  • 由于它会将所有数据加载到内存中,因此无法扩展,并且对于非常大(大于内存)的数据集来说可能是一个错误的选择

进一步阅读

  • 10分钟Pandas
  • Pandas机器学习的数据处理

Dask

网站:https://dask.org/

总览

根据他们的网站," Dask是用于Python并行计算的灵活库。"

从本质上讲,Dask扩展了诸如Pandas之类的通用接口,供在分布式环境中使用-例如,Dask DataFrame模仿了。

优点

  • 可扩展性— Dask可以在本地计算机上运行并扩展到集群
  • 能够处理内存不足的数据集
  • 即使在相同的硬件上,使用相同的功能也可以提高性能(由于并行计算)
  • 最少的代码更改即可从Pandas切换
  • 旨在与其他Python库集成

缺点

  • 除了并行性,还有其他方法可以提高Pandas的性能(通常更为显着)
  • 如果您所做的计算量很小,则没有什么好处
  • Dask DataFrame中未实现某些功能

进一步阅读

  • Dask文档
  • 为什么每个数据科学家都应该使用Dask

Modin

网站:https://github.com/modin-project/modin

总览

Modin与Dask相似之处在于,它试图通过使用并行性并启用分布式DataFrames来提高Pandas的效率。 与Dask不同,Modin基于Ray(任务并行执行框架)。

Modin优于Dask的主要好处是Modin可以自动处理跨计算机核心分发数据(无需进行配置)。

优点

  • 可伸缩性— Ray比Modin提供的更多
  • 完全相同的功能(即使在相同的硬件上)也可以提高性能
  • 最小的代码更改即可从Pandas切换(更改import语句)
  • 提供所有Pandas功能-比Dask更多的"嵌入式"解决方案

缺点

  • 除了并行性,还有其他方法可以提高Pandas的性能(通常更为显着)
  • 如果您所做的计算量很小,则没有什么好处

进一步阅读

  • Modin文档
  • Dask和Modin有什么区别"https://www.bonobo-project.org/">https://www.bonobo-project.org/
  • bubbles http://bubbles.databrewery.org/
  • pygrametl http://chrthomsen.github.io/pygrametl/
  • Apache Beam https://beam.apache.org/

结论

我希望这份清单至少可以帮助您了解Python必须提供哪些工具来进行数据转换。 在进行了这项研究之后,我相信Python是ETL的优秀选择-这些工具及其开发人员使它成为了一个了不起的平台。