PyODPS 可作為 DataWorks 等資料開發平台中的資料開發節點運行。這些平台內建了 PyODPS 運行環境並提供調度執行能力,無需手動建立 ODPS 入口對象。PyODPS 提供類似 Pandas 的 DataFrame API,支援靈活的資料處理操作。本文以 DataWorks 為例介紹 PyODPS 的使用方法。
前提條件
操作步驟
建立PyODPS節點
本文使用DataWorks PyODPS節點開發,詳情請參見開發PyODPS 3任務。
以PyODPS 3節點作為樣本,PyODPS 3節點底層的Python版本為3.7。
PyODPS節點擷取本地處理的資料量不能超過50 MB,節點運行時佔用的記憶體不能超過1 GB,否則節點任務會被系統中止。因此請避免在PyODPS任務中寫入資料量較大的Python處理代碼。
在DataWorks上編寫代碼並進行調試效率較低,為提升運行效率,建議本地安裝IDEA進行代碼開發。
建立商務程序
進入資料開發頁面,按右鍵業務流程,選擇新建業務流程。
建立PyODPS節點
按右鍵建立的商務程序,選擇,輸入節點名稱,單擊提交。
編輯PyODPS節點
編寫程式碼
在PyODPS節點的編輯框中輸入測試代碼。以下是一個完整的使用PyODPS介面執行表操作的樣本,更多關於表操作以及SQL操作的方法請參見表和SQL。
from odps import ODPS # 初始化ODPS入口對象。在DataWorks的PyODPS節點中無需此步驟,全域變數o已自動可用。 o = ODPS( access_id='<YOUR_ACCESS_ID>', secret_access_key='<YOUR_SECRET_ACCESS_KEY>', project='<YOUR_PROJECT_NAME>', endpoint='<YOUR_PROJECT_ENDPOINT>' ) # 建立非分區表my_new_table。 table = o.create_table('my_new_table', 'num bigint, id string', if_not_exists=True) # 向非分區表my_new_table中插入資料。 records = [[111, 'aaa'], [222, 'bbb'], [333, 'ccc'], [444, '中文']] o.write_table(table, records) # 讀取非分區表my_new_table中的資料。 for record in o.read_table(table): print(record[0], record[1]) # 以運行SQL的方式讀取表中的資料。 with o.execute_sql('select * from my_new_table;', hints={'odps.sql.allow.fullscan': 'true'}).open_reader() as reader: for record in reader: print(record[0], record[1]) # 刪除表以清除資源。 table.drop()運行代碼
完成編輯後,單擊
表徵圖。運行結束後,在下方的運行日誌中可看到運行結果。輸出如下日誌代表執行成功。2023-07-21 15:06:41 INFO ======================================================== Executing user script with PyODPS 0.11.2.3 Tunnel session created: <TableUploadSession xxx > Tunnel session created: <TableDownloadSession xxx > 111 aaa 222 bbb 333 ccc 444 中文 Tunnel session created: <InstanceDownloadSession id=xxx project_name=xxx > 111 aaa 222 bbb 333 ccc 444 中文 2023-07-21 15:06:49 INFO ======================================================== 2023-07-21 15:06:49 INFO Exit code of the Shell command 0 2023-07-21 15:06:49 INFO --- Invocation of Shell command completed --- 2023-07-21 15:06:49 INFO Shell run successfully! 2023-07-21 15:06:49 INFO Current task status: FINISH 2023-07-21 15:06:49 INFO Cost time is: 7.507s /home/admin/alisatasknode/taskinfo/xxx xxx .log-END-EOF