全部產品
Search
文件中心

DataWorks:在PyODPS節點中調用第三方包

更新時間:Jun 19, 2024

本文為您介紹在依賴普通的Python指令碼和開源第三方包的情境下,如何使用DataWorks PyODPS節點調用第三方包。

背景資訊

  • 在DataWorks資源群組本地運行PyODPS節點代碼時,若代碼中需要調用第三方包,需要根據任務使用的資源群組不同,採用不同方式在資源群組上準備第三方包環境:

  • 如果您的PyODPS任務需要訪問特殊的網路環境(如VPC網路或IDC網路中的資料來源或服務等),請使用新版資源群組或舊版獨享調度資源群組,並參考網路連通方案打通資源群組與目標環境的網路連通。

  • PyODPS文法及更多資訊請參見PyODPS文檔

  • PyODPS節點分為PyODPS 2和PyODPS 3兩種,二者的區別在於底層Python語言版本不同。PyODPS 2底層Python語言版本為Python 2,PyODPS 3底層Python語言版本為Python 3,請您根據實際使用的Python語言版本建立PyODPS節點。更多建立PyODPS節點資訊,請參見開發PyODPS 2任務開發PyODPS 3任務

使用限制

  • DataWorks建議您在PyODPS節點內擷取到本地處理的資料不超過50 MB,該操作受限於DataWorks執行資源的不同規格處理的本機資料過多並超出作業系統閾值時可能發生OOM(Got killed)錯誤。請避免在PyODPS節點中寫入過多的資料處理代碼。詳情請參見PyODPS概述

  • 如果您發現有Got killed報錯,即表明記憶體使用量超限,進程被中止。因此,請盡量避免本地的資料操作。通過PyODPS發起的SQL和DataFrame任務(除to_pandas外)不受此限制。

  • 使用獨享調度資源群組時,非自訂函數代碼可以使用平台預裝的NumPy和Pandas。不支援其他帶有二進位代碼的第三方包。

  • 由於相容性原因,在DataWorks中,options.tunnel.use_instance_tunnel預設設定為False。如果需要全域開啟instance tunnel,需要手動將該值設定為True。

依賴普通的Python指令碼

  1. 進入資料開發頁面。

    登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的資料建模與開發 > 資料開發,在下拉框中選擇對應工作空間後單擊進入資料開發

  2. 建立Python資源。

    1. DataStudio(資料開發)頁面,滑鼠移至上方至建立表徵圖,單擊建立資源 > Python

      您也可以展開商務程序目錄下的目標商務程序,按右鍵MaxCompute,選擇建立資源 > Python

    2. 建立資源對話方塊中,輸入名稱(樣本為pyodps_packagetest.py)。

      重要

      資源名稱只能包含中文、字母、數字、點、底線(_)、減號(-),且必須加尾碼名.py

    3. 單擊建立

    4. 在建立的Python資源中,輸入需要引用的Python指令碼,樣本如下。

      # import os
      # print os.getcwd()
      # print os.path.abspath('.')
      # print os.path.abspath('..')
      # print os.path.abspath(os.curdir)
      
      def printname():
          print 'test2'
      print 123
    5. 單擊工具列中的提交表徵圖。

  3. 建立PyODPS 2節點。

    1. 展開商務程序目錄下的目標商務程序,按右鍵MaxCompute,選擇建立節點 > PyODPS 2

    2. 建立節點對話方塊中,輸入名稱(樣本為pyodps_testpackage)。

      說明

      節點名稱必須是大小寫字母、中文、數字、底線(_)和小數點(.),且不能超過128個字元。

    3. 單擊確認

  4. 開啟PyODPS 2節點的編輯頁面,按右鍵目標Python資源名稱,選擇引用資源

    引用後,PyODPS 2節點中會自動寫入引用語句##@resource_reference{"pyodps_packagetest.py"}

    pyodps插圖

  5. 在PyODPS 2節點內輸入引用Python指令碼的代碼,樣本如下。

    ##@resource_reference{"pyodps_packagetest.py"} #用於引用之前建立的Python資源,該語句必須添加。
    
    import sys
    import os
    sys.path.append(os.path.dirname(os.path.abspath('pyodps_packagetest.py'))) #引入資源至工作空間。
    import pyodps_packagetest #引用資源,資源名需要刪除尾碼.py。
    pyodps_packagetest.printname() #調用方法。
  6. 單擊工具列中的運行表徵圖,在頁面下方的作業記錄地區查看結果。

    查看結果

依賴開源的三方包

如果您依賴一個開源的第三方包,需要使用PIP安裝,可根據所使用的資源群組不同,按需選擇:

新版資源群組(通用型資源群組)配置第三方包

新版資源群組支援自訂鏡像,您可以根據需要,在建立自訂鏡像時,選擇所需的第三方包進行安裝。然後在PyODPS任務的調度配置中,使用此鏡像。

配置說明

在建立鏡像頁面,按需配置需要的第三方包。建立鏡像的更多參數,請參見建立自訂鏡像

關鍵參數:

  • 鏡像名稱/IDdataworks_pyodps_task_pod

  • 支援任務類型:按需選擇PyODPS2PyODPS3

  • 安裝包:按需選擇需要使用的第三方包

說明

更多詳細配置,請參見自訂鏡像配置樣本

獨享調度資源群組配置第三方包

該方法使用獨享調度資源群組,需要在獨享調度資源群組的營運助手中安裝第三方包,詳情請參見營運助手

PyODPS節點分為PyODPS 2和PyODPS 3:

  • 如果依賴PyODPS 2節點,請執行如下命令。

    pip install <需要安裝的包> -i  https://pypi.tuna.tsinghua.edu.cn/simple

    執行命令後,如果提示需要升級PIP版本,請執行如下命令。

    pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 如果依賴PyODPS 3節點,請執行如下命令。

    /home/tops/bin/pip3 install <需要安裝的包> -i https://pypi.tuna.tsinghua.edu.cn/simple

    安裝了需要的三方包後,使用import命令匯入對應包即可使用。例如,通過營運助手使用pip3 -install oss2語句安裝了oss2這個Python依賴包後,您可以在PyODPS 3節點中使用import oss2語句匯入oss2依賴包並使用。

    執行命令後,如果提示需要升級PIP版本,請執行如下命令。

    /home/tops/bin/pip3 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple

    如果使用PyODPS 3出現如下報錯,請提交工單申請開啟許可權。

    "/home/admin/usertools/tools/cmd-0.sh:行3: /home/tops/bin/python3: 沒有那個檔案或目錄"