本文為您介紹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')