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

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

初始化完成,Ray自動(dòng)識(shí)別了你機(jī)器上可用的核心,接下來(lái)的用法,就和Pandas一樣了。
Pandas on Ray目前還處于早期,實(shí)現(xiàn)了Pandas的一部分功能。以一個(gè)股票波動(dòng)的數(shù)據(jù)集為例,它所支持的Pandas功能包括檢查數(shù)據(jù)、查詢(xún)上漲的天數(shù)、按日期索引、按日期查詢(xún)、查詢(xún)股票上漲的所有日期等等。
這個(gè)項(xiàng)目的最終目標(biāo)是在Ray上完整實(shí)現(xiàn)Pandas API的功能,讓用戶(hù)可以在云上用Pandas。
目前,伯克利RiseLab的研究員們已經(jīng)用45天時(shí)間,實(shí)現(xiàn)了Pandas DataFrame API的25%。
革命尚未成功,項(xiàng)目仍在繼續(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請(qǐng)看RiseLab博客原文:https://rise.cs.berkeley.edu/blog/pandas-on-ray/
- 試用Pandas on Ray請(qǐng)參考這個(gè)文檔:https://rise.cs.berkeley.edu/blog/pandas-on-ray/
- 給Ray團(tuán)隊(duì)提要求請(qǐng)到GitHub開(kāi)issue:https://github.com/ray-project/ray/issues
- 如果對(duì)Ray感興趣,可以讀一讀他們的論文:https://arxiv.org/abs/1712.05889