用于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发送邮件实例
Jan 10 Python
Python字符串格式化输出方法分析
Apr 13 Python
Python开发的HTTP库requests详解
Aug 29 Python
python数据结构之列表和元组的详解
Sep 23 Python
创建Django项目图文实例详解
Jun 06 Python
详解python路径拼接os.path.join()函数的用法
Oct 09 Python
python SVD压缩图像的实现代码
Nov 05 Python
详解python 破解网站反爬虫的两种简单方法
Feb 09 Python
python 字符串的驻留机制及优缺点
Jun 19 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
Django程序的优化技巧
Apr 29 Python
Python Matplotlib绘制两个Y轴图像
Apr 13 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自定义函数之递归删除文件及目录
2010/08/08 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
JavaScript 指导方针
2007/04/05 Javascript
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
限制文本框输入N个字符的js代码
2010/05/13 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
2017/06/12 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
python脚本作为Windows服务启动代码详解
2018/02/11 Python
Python返回数组/List长度的实例
2018/06/23 Python
python中pip的安装与使用教程
2018/08/10 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
Python安装selenium包详细过程
2019/07/23 Python
python队列原理及实现方法示例
2019/11/27 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
服务行业个人求职的自我评价
2013/12/12 职场文书
高中教师考核方案
2014/05/18 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
统计专业自荐书
2014/07/06 职场文书
团队拓展活动总结
2014/08/27 职场文书
先进事迹演讲稿
2014/09/01 职场文书
2015年父亲节活动总结
2015/02/12 职场文书
广告业务员岗位职责
2015/02/13 职场文书
教育教学工作反思
2016/02/24 职场文书
MySQL 字符集 character
2022/05/04 MySQL
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL