一行代碼,Pandas秒變分散式,快速處理TB級數據

夏乙 發自 凹非寺

量子位 出品 | 公眾號 QbitAI

剛剛在Pandas上為十幾KB的數據做好了測試寫好了處理腳本,上百TB的同類大型數據集擺到了面前。這時候,你可能面臨著一個兩難的選擇:

繼續用Pandas?可能會相當慢,上百TB數據不是它的菜。

(?_?) 然而,Spark啊分散式啊什麼的,學習曲線好陡峭哦~在Pandas里寫的處理腳本都作廢了好桑心哦~


別灰心,你可能真的不需要Spark了。

加州大學伯克利分校RiseLab最近在研究的Pandas on Ray,就是為了讓Pandas運行得更快,能搞定TB級數據而生的。這個DataFrame庫想要滿足現有Pandas用戶不換API,就提升性能、速度、可擴展性的需求。

研究團隊說,只需要替換一行代碼,8核機器上的Pandas查詢速度就可以提高4倍。

其實也就是用一個API替換了Pandas中的部分函數,這個API基於Ray運行。Ray是伯克利年初推出的分散式AI框架,能用幾行代碼,將家用電腦上的原型演算法轉換成適合大規模部署的分散式計算應用。

Pandas on Ray的性能雖說比不上另一個分散式DataFrame庫Dask,但更容易上手,用起來和Pandas幾乎沒有差別。用戶不需要懂分散式計算,也不用學一個新的API。

與Dask不同的是,Ray使用了Apache Arrow里的共享內存對象存儲,不需要對數據進行序列化和複製,就能跨進程通訊。

在8核32G內存的AWS m5.2xlarge實例上,Ray、Dask和Pandas讀取csv的性能對比

它將Pandas包裹起來並透明地把數據和計算分布出去。用戶不需要知道他們的系統或者集群有多少核,也不用指定如何分配數據,可以繼續用之前的Pandas notebook。

前面說過,使用Pandas on Ray需要替換一行代碼,其實就是換掉導入語句。

# import pandas as pdimport ray.dataframe as pd

這時候你應該看到:

初始化完成,Ray自動識別了你機器上可用的核心,接下來的用法,就和Pandas一樣了。

Pandas on Ray目前還處於早期,實現了Pandas的一部分功能。以一個股票波動的數據集為例,它所支持的Pandas功能包括檢查數據、查詢上漲的天數、按日期索引、按日期查詢、查詢股票上漲的所有日期等等。

這個項目的最終目標是在Ray上完整實現Pandas API的功能,讓用戶可以在雲上用Pandas。

目前,伯克利RiseLab的研究員們已經用45天時間,實現了Pandas DataFrame API的25%。


革命尚未成功,項目仍在繼續。這些人都在為之努力:

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博客原文:Pandas on Ray - RISE Lab

試用Pandas on Ray請參考這個文檔:Pandas on Ray - RISE Lab

給Ray團隊提要求請到GitHub開issue:ray-project/ray

如果對Ray感興趣,可以讀一讀他們的論文:A Distributed Framework for Emerging AI Applications

歡迎大家關注我們的專欄:量子位 - 知乎專欄

誠摯招聘

量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復「招聘」兩個字。

量子位 QbitAI · 頭條號簽約作者

?? ? 追蹤AI技術和產品新動態


推薦閱讀:

聚類演算法第一篇-概覽
Teradata SQL基礎:從已有表創建新表
是什麼驅動了Python近些年強力的增長?來自Stack Overflow的分析

TAG:數據科學 | 機器學習 | 分散式計算 |