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


Posted in Python onJuly 21, 2020

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有什么区别?

Petl

网站:https://petl.readthedocs.io/en/stable/

总览

petl包含了pandas的许多功能,但专为ETL设计,因此缺少额外的功能,例如用于分析的功能。 petl具有用于ETL的所有三个部分的工具,但本文仅专注于数据转换。

尽管petl提供了转换表的功能,但其他工具(例如pandas)似乎更广泛地用于转换和有据可查的文档,因此petl对此吸引力较小。

优点

  • 最小化系统内存的使用,使其能够扩展到数百万行
  • 对于在SQL数据库之间进行迁移很有用
  • 轻巧高效

缺点

  • 通过很大程度地减少对系统内存的使用,petl的执行速度会变慢-不建议在性能很重要的应用程序中使用
  • 较少使用此列表中的其他解决方案进行数据处理

进一步阅读

  1. 使用Petl快速了解数据转换和迁移
  2. petl转换文档 PySpark

网站:http://spark.apache.org/

总览

Spark专为处理和分析大数据而设计,并提供多种语言的API。 使用Spark的主要优点是Spark DataFrames使用分布式内存并利用延迟执行,因此它们可以使用集群处理更大的数据集,而Pandas之类的工具则无法实现。

如果要处理的数据非常大,并且数据操作的速度和大小很大,Spark是ETL的理想选择。

优点

  • 可扩展性和对更大数据集的支持
  • 就语法而言,Spark DataFrames与Pandas非常相似
  • 通过Spark SQL使用SQL语法进行查询
  • 与其他流行的ETL工具兼容,包括Pandas(您实际上可以将Spark DataFrame转换为Pandas DataFrame,从而使您可以使用各种其他库)
  • 与Jupyter笔记本电脑兼容
  • 内置对SQL,流和图形处理的支持

缺点

  • 需要一个分布式文件系统,例如S3
  • 使用CSV等数据格式会限制延迟执行,需要将数据转换为Parquet等其他格式
  • 缺少对数据可视化工具(如Matplotlib和Seaborn)的直接支持,这两种方法都得到了Pandas的良好支持

进一步阅读

  • Python中的Apache Spark:新手指南
  • PySpark简介
  • PySpark文档(尤其是语法) 值得一提

尽管我希望这是一个完整的列表,但我不希望这篇文章过长!

确实有很多许多用于数据转换的Python工具,因此我包括了这一部分,至少是我错过的其他项目(我可能会在本文的第二部分中进一步探讨这些项目)。

  • bonobo 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的优秀选择-这些工具及其开发人员使它成为了一个了不起的平台。

到此这篇关于用于ETL的Python数据转换工具的文章就介绍到这了,更多相关Python数据转换工具内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
基于Python 的进程管理工具supervisor使用指南
Sep 18 Python
python中利用Future对象异步返回结果示例代码
Sep 07 Python
python通过伪装头部数据抵抗反爬虫的实例
May 07 Python
python中协程实现TCP连接的实例分析
Oct 14 Python
解决在pycharm中显示额外的 figure 窗口问题
Jan 15 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
在Python 字典中一键对应多个值的实例
Feb 03 Python
python使用配置文件过程详解
Dec 28 Python
Python 之 Json序列化嵌套类方式
Feb 27 Python
python爬虫实现POST request payload形式的请求
Apr 30 Python
python 负数取模运算实例
Jun 03 Python
pytorch 带batch的tensor类型图像显示操作
May 20 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
Jul 21 #Python
Python json格式化打印实现过程解析
Jul 21 #Python
基于python实现删除指定文件类型
Jul 21 #Python
python打开音乐文件的实例方法
Jul 21 #Python
Python读取yaml文件的详细教程
Jul 21 #Python
Python中bisect的用法及示例详解
Jul 20 #Python
python为什么要安装到c盘
Jul 20 #Python
You might like
yii用户注册表单验证实例
2015/12/26 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
IE无法设置短域名下Cookie
2010/09/23 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
Python打包可执行文件的方法详解
2016/09/19 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
Python修改文件往指定行插入内容的实例
2019/01/30 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
Django rest framework分页接口实现原理解析
2020/08/21 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
教师的实习鉴定
2013/12/15 职场文书
海飞丝的广告词
2014/03/20 职场文书
座谈会主持词
2014/03/20 职场文书
小学班级口号
2014/06/09 职场文书
合作经营协议书范本
2014/09/16 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
合作合同协议书范本
2015/01/27 职场文书
如何有效防止sql注入的方法
2021/05/25 SQL Server