用于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 深入理解yield
Sep 06 Python
python生成随机验证码(中文验证码)示例
Apr 03 Python
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
Python微信库:itchat的用法详解
Aug 14 Python
scrapy爬虫实例分享
Dec 28 Python
python实现朴素贝叶斯算法
Nov 19 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
浅谈Pycharm中的Python Console与Terminal
Jan 17 Python
python实现ip代理池功能示例
Jul 05 Python
python 标准差计算的实现(std)
Jul 29 Python
基于python的itchat库实现微信聊天机器人(推荐)
Oct 29 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 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
php中http与https跨域共享session的解决方法
2014/12/20 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
常用PHP封装分页工具类
2017/01/14 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
JS执行删除前的判断代码
2014/02/18 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
JavaScript中的定时器之Item23的合理使用
2015/10/30 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
javascript 判断当前浏览器版本并判断ie版本
2017/02/17 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
对Python 数组的切片操作详解
2018/07/02 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
HTML5地理定位_动力节点Java学院整理
2017/07/12 HTML / CSS
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
国外软件测试工程师面试题
2016/12/09 面试题
大四自我鉴定范文
2013/10/06 职场文书
管理学专业个人求职信范文
2013/12/13 职场文书
优秀员工表扬信
2014/01/17 职场文书
歌唱比赛主持词
2014/03/18 职场文书
单位作风建设自查报告
2014/10/23 职场文书
怎么写工作检讨书
2014/11/16 职场文书
2014年图书室工作总结
2014/12/09 职场文书
中秋客户感谢信
2015/01/22 职场文书
2015年七一建党节活动总结
2015/03/20 职场文书
观后感开头
2015/06/19 职场文书
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android