一行代碼,Pandas秒變分布式,快速處理TB級數(shù)據(jù)
剛剛在Pandas上為十幾KB的數(shù)據(jù)做好了測試寫好了處理腳本,上百TB的同類大型數(shù)據(jù)集擺到了面前。這時候,你可能面臨著一個兩難的選擇:
- 繼續(xù)用Pandas?可能會相當(dāng)慢,上百TB數(shù)據(jù)不是它的菜。
(ಥ_ಥ) 然而,Spark啊分布式啊什么的,學(xué)習(xí)曲線好陡峭哦~在Pandas里寫的處理腳本都作廢了好桑心哦~
別灰心,你可能真的不需要Spark了。
加州大學(xué)伯克利分校RiseLab最近在研究的Pandas on Ray,就是為了讓Pandas運行得更快,能搞定TB級數(shù)據(jù)而生的。這個DataFrame庫想要滿足現(xiàn)有Pandas用戶不換API,就提升性能、速度、可擴展性的需求。
研究團隊說,只需要替換一行代碼,8核機器上的Pandas查詢速度就可以提高4倍。
其實也就是用一個API替換了Pandas中的部分函數(shù),這個API基于Ray運行。Ray是伯克利年初推出的分布式AI框架,能用幾行代碼,將家用電腦上的原型算法轉(zhuǎn)換成適合大規(guī)模部署的分布式計算應(yīng)用。
Pandas on Ray的性能雖說比不上另一個分布式DataFrame庫Dask,但更容易上手,用起來和Pandas幾乎沒有差別。用戶不需要懂分布式計算,也不用學(xué)一個新的API。
與Dask不同的是,Ray使用了Apache Arrow里的共享內(nèi)存對象存儲,不需要對數(shù)據(jù)進行序列化和復(fù)制,就能跨進程通訊。

在8核32G內(nèi)存的AWS m5.2xlarge實例上,Ray、Dask和Pandas讀取csv的性能對比
它將Pandas包裹起來并透明地把數(shù)據(jù)和計算分布出去。用戶不需要知道他們的系統(tǒng)或者集群有多少核,也不用指定如何分配數(shù)據(jù),可以繼續(xù)用之前的Pandas notebook。
前面說過,使用Pandas on Ray需要替換一行代碼,其實就是換掉導(dǎo)入語句。
- # import pandas as pd
- import ray.dataframe as pd
這時候你應(yīng)該看到:

初始化完成,Ray自動識別了你機器上可用的核心,接下來的用法,就和Pandas一樣了。
Pandas on Ray目前還處于早期,實現(xiàn)了Pandas的一部分功能。以一個股票波動的數(shù)據(jù)集為例,它所支持的Pandas功能包括檢查數(shù)據(jù)、查詢上漲的天數(shù)、按日期索引、按日期查詢、查詢股票上漲的所有日期等等。
這個項目的最終目標是在Ray上完整實現(xiàn)Pandas API的功能,讓用戶可以在云上用Pandas。
目前,伯克利RiseLab的研究員們已經(jīng)用45天時間,實現(xiàn)了Pandas DataFrame API的25%。
革命尚未成功,項目仍在繼續(xù)。這些人都在為之努力:
Devin Petersohn, Robert Nishihara, Philipp Moritz, Simon Mo, Kunal Gosar, Helen Che, Harikaran Subbaraj, Peter Veerman, Rohan Singh, Joseph Gonzalez, Ion Stoica, Anthony Joseph
- 更深入地了解Pandas on Ray請看RiseLab博客原文:https://rise.cs.berkeley.edu/blog/pandas-on-ray/
- 試用Pandas on Ray請參考這個文檔:https://rise.cs.berkeley.edu/blog/pandas-on-ray/
- 給Ray團隊提要求請到GitHub開issue:https://github.com/ray-project/ray/issues
- 如果對Ray感興趣,可以讀一讀他們的論文:https://arxiv.org/abs/1712.05889