全部產品
Search
文件中心

MaxCompute:概述

更新時間:Jun 19, 2024

本文為您介紹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資料科學棧加速,包括NumpyPandasScikit-learn

Mars常用介面如下:

  • Mars Tensor介面

    和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群進行諮詢。