1. 程式人生 > 程式設計 >用於ETL的Python資料轉換工具詳解

用於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有什麼區別?

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資料轉換工具內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!