全部產品
Search
文件中心

MaxCompute:PyODPS節點實現避免將資料下載到本地

更新時間:Jun 19, 2024

本文為您介紹PyODPS如何避免將資料下載到本地。

背景資訊

PyODPS提供了多種方便下載資料到本地的方法。因此,在裝置允許的情況下,可以把資料下載到本地處理,然後再上傳至MaxCompute。但是這種操作非常低效,資料下載到本地進行處理,無法使用MaxCompute的大規模並行能力。當資料量大於10 MB時,不建議進行本機資料處理。常見的將資料下載到本地的操作如下:

  • Head、Tail和To_pandas方法的調用。通常,可以調用head、tail方法返回少量資料進行資料探查,當資料量較大時,建議調用Persist方法,將資料直接儲存在MaxCompute表中。詳情請參見執行

  • 在表或SQL執行個體上直接執行Open_reader方法擷取表資料。當資料量大時,建議使用PyODPS DataFrame(從MaxCompute表建立)和MaxCompute SQL來處理資料,以替代本機資料處理這種比較低效的方式。

範例程式碼

將一份JSON串資料按Key-Value對展開成一行,範例程式碼如下。

  • 本地測試,通過head()方法返回少量資料進行測試。

    In [12]: df.head(2)
                   json
    0  {"a": 1, "b": 2}
    1  {"c": 4, "b": 3}
    
    In [14]: from odps.df import output
    
    In [16]: @output(['k', 'v'], ['string', 'int'])
        ...: def h(row):
        ...:     import json
        ...:     for k, v in json.loads(row.json).items():
        ...:         yield k, v
        ...:   
    
    In [21]: df.apply(h, axis=1).head(4)
    
       k  v
    0  a  1
    1  b  2
    2  c  4
    3  b  3
  • 線上生產,通過persist()方法將結果存回MaxCompute表。

    In [14]: from odps.df import output
    
    In [16]: @output(['k', 'v'], ['string', 'int'])
        ...: def h(row):
        ...:     import json
        ...:     for k, v in json.loads(row.json).items():
        ...:         yield k, v
        ...:   
    
    In [21]: df.apply(h, axis=1).persist('my_table')