本文為您介紹Mars的功能、與PyODPS DataFrame的區別和使用情境。
隨著MaxCompute MaxFrame的上線發布,將逐步替換PyODPS DataFrame及Mars介面,同時在運算元相容性以及分布式能力上有明顯提升,建議新使用者/新作業直接基於MaxFrame進行Python開發工作。
使用情境
Mars與PyODPS DataFrame使用情境如下:
Mars
經常使用PyODPS DataFrame的to_pandas()方法,將PyODPS DataFrame轉換成Pandas DataFrame的情境。
熟悉Pandas介面,但不願意學習PyODPS DataFrame介面的情境。
使用索引的情境。
建立DataFrame後需要保證資料順序的情境。
Mars DataFrame通過iloc等方法可以擷取某個位移的資料。例如,
df.iloc[10]
可以擷取第10行資料。Mars DataFrame也支援需要保證資料順序才可以使用的特性介面df.shift()
和df.ffill()
。需要並行和分布化Numpy或Scikit-learn,以及支援分布式運行TensorFlow、PyTorch和XGBoost的情境。
資料量在TB層級以下的情境。
PyODPS DataFrame
使用MaxCompute調度作業的情境。PyODPS DataFrame會將DataFrame編譯成MaxCompute SQL。如果需要通過MaxCompute調度作業,建議您使用PyODPS DataFrame。
穩定性要求較高的作業情境。PyODPS DataFrame會將作業編譯至MaxCompute執行,由於MaxCompute相當穩定,而Mars相對比較新,如果對穩定性有很高要求,建議您使用PyODPS DataFrame。
資料量在TB層級以上的情境,建議您使用PyODPS DataFrame。
與PyODPS DataFrame的區別
API
Mars
Mars DataFrame完全相容Pandas。Mars Tensor相容Numpy。Mars Learn相容Scikit-learn。
PyODPS
只有DataFrame介面,和Pandas的介面差異較大。
索引
Mars
Mars DataFrame支援索引操作,包含行和列索引。範例程式碼如下。
In [1]: import mars.dataframe as md In [5]: import mars.tensor as mt In [7]: df = md.DataFrame(mt.random.rand(10, 3), index=md.date_range('2020-5-1', periods=10)) In [9]: df.loc['2020-5'].execute() Out[9]: 0 1 2 2020-05-01 0.061912 0.507101 0.372242 2020-05-02 0.833663 0.818519 0.943887 2020-05-03 0.579214 0.573056 0.319786 2020-05-04 0.476143 0.245831 0.434038 2020-05-05 0.444866 0.465851 0.445263 2020-05-06 0.654311 0.972639 0.443985 2020-05-07 0.276574 0.096421 0.264799 2020-05-08 0.106188 0.921479 0.202131 2020-05-09 0.281736 0.465473 0.003585 2020-05-10 0.400000 0.451150 0.956905
PyODPS
不支援索引操作。
資料順序
Mars
Mars DataFrame建立後,會保證資料順序,支援時序操作(
shift
)、向前(ffill
)、向後(bfill
)和填空值操作。In [3]: df = md.DataFrame([[1, None], [None, 1]]) In [4]: df.execute() Out[4]: 0 1 0 1.0 NaN 1 NaN 1.0 In [5]: df.ffill().execute() #空值用上一行的值。 Out[5]: 0 1 0 1.0 NaN 1 1.0 1.0
PyODPS
PyODPS使用MaxCompute計算和儲存資料,而MaxCompute並不保證資料順序,因此PyODPS不保證資料順序,不支援時序操作。
執行層
Mars
Mars包含用戶端和分布式執行層。您可以通過調用
o.create_mars_cluster
,在MaxCompute內部建立Mars叢集,並將計算作業直接提交至Mars叢集,調度費用極小。在資料規模較小時,Mars更有優勢。PyODPS
PyODPS是一個用戶端,不包含任何服務端部分。執行PyODPS DataFrame時,系統會將計算作業編譯至MaxCompute SQL。因此,PyODPS DataFrame支援的操作,取決於MaxCompute SQL。此外,您每次調用
execute
方法時,會提交一次MaxCompute作業,需要在叢集內調度作業。
使用說明
Mars是一個基於張量的統一分散式運算架構。Mars能利用並行和分布式技術,為Python資料科學棧加速,包括Numpy、Pandas和Scikit-learn。
Mars常用介面如下:
和Numpy保持一致,且支援大規模高維數組。範例程式碼如下。
import mars.tensor as mt a = mt.random.rand(10000, 50) b = mt.random.rand(50, 5000) a.dot(b).execute()
Mars DataFrame介面
和Pandas保持一致,且支援大規模資料處理和分析。範例程式碼如下。
import mars.dataframe as md ratings = md.read_csv('Downloads/ml-20m/ratings.csv') movies = md.read_csv('Downloads/ml-20m/movies.csv') movie_rating = ratings.groupby('movieId', as_index=False).agg({'rating': 'mean'}) result = movie_rating.merge(movies[['movieId', 'title']], on='movieId') result.sort_values(by='rating', ascending=False).execute()
Mars Learn介面
和Scikit-learn保持一致。範例程式碼如下。Mars Learn可以整合TensorFlow、PyTorch和XGBoost。
import mars.dataframe as md from mars.learn.neighbors import NearestNeighbors df = md.read_csv('data.csv') nn = NearestNeighbors(n_neighbors=10) nn.fit(df) neighbors = nn.kneighbors(df).fetch()
參考文檔
支援人員
如果您在使用Mars過程中遇到問題,請單擊申請連結加入支援人員DingTalk群進行諮詢。