Python 算子

  • 文档创建者:Wendy123456
  • 历史版本:45
  • 最近更新:Nikozhan 于 2025-04-30
  • 1. 概述

    1.1 版本

    FineDataLink 版本功能變動
    4.0.29資料轉換節點中新增「Python 算子」
    4.1.6.2載入檔案的預設路徑從%fdl_home%\webapps\webroot\WEB-INF\assist\python遷移到%fdl_home%\webapps\webroot\WEB-INF\plugin\fdl_python
    4.1.13.1FINE_CONF_ENTITY 中新增參數 PythonConfig.metaFromMock,可控制 Python 算子的運作邏輯
    4.2.5.3
    • 支援資料開發時除錯 Python,可查看傳回結果,詳情參見本文 4.2 節

    • 支援 Python 算子接入多個輸入類算子、程式類型算子

    • ops 首次部署 FDL 時原本鏡像包中的 python 模組會因為掛載宿主機目錄導致被改寫,此版本已經解決

    • Python 算子記憶體佔用限制優化調整,詳情參見本文 5.2 節

    1.2 應用場景

    • 在資料開發程式中,對於一些複雜的資料處理(比如使用視覺化算子或者 SparkSQL 較難實現的),需要在「資料轉換」節點中使用 Python 腳本處理資料。

    • 在資料開發程式中,使用者希望透過 FineDataLink 讀取檔案資料,但 文件输入算子 不支援讀取該檔案,該場景下可透過 Python 腳本載入檔案資料。

    1.3 功能簡介

    資料轉換節點中新增「Python 算子」,可呼叫 Python 腳本進行復雜資料處理。如下圖所示:

    注:「Python 算子」與「Python腳本」的差別請參見:Python 腳本與 Python 算子差別

    demo任務詳情參見:https://demo.finedatalink.com/  「資料轉換-Python 算子」

    2. 使用須知

    1)4.2.5.3 之前的版本「Python 算子」前面只能接入一個輸入算子。

    4.2.5.3 版本開始支援 Python 算子接入多個輸入類算子、程式類型算子。

    2)「Python 算子」不能放在兩個程式性算子中間。如果「Python 算子」上游輸入源全是輸入類算子,則 Python 算子後面可以接程式型(除欄位設定算子外的其他「連結」、「轉換」、「實驗室」算子)算子。如果 Python 算子上游輸入源存在程式型算子,則 Python 算子後面只能接匯出型算子。

    3)Python 編輯器只能聯想 Python 基礎文法,不能聯想 import 中的方法;Python 編輯器沒有文法高亮;Python編輯器沒有文法檢查。

    4)使用「Python 算子」載入檔案時,支援絕對路徑/相對路徑載入檔案。

    需注意,4.1.6.2 之前版本預設運作的路徑為%fdl_home%\webapps\webroot\WEB-INF\assist\python;4.1.6.2 及之後版本,預設運作的路徑為%fdl_home%\webapps\webroot\WEB-INF\plugin\fdl_python

    (該路徑使用者可自訂,請參見本文 3.3 節內容),根據這個路徑去算相對路徑。

    5)可以使用「Python 算子」匯入自訂函式:

    • 支援匯入 python 運作環境下安裝的第三方模組。

    • 支援匯入webroot/WEB-INF/assist/python/resources/下自訂的模組。

    6)「Python 算子」的輸入源,在 Python 程式碼中是以 Python 的 pandas 庫中的 dataframe 資料結構存在。使用者若想對資料源做處理,可參考 dataframe 的用法。

    7)numpy 2.0 版本(2024年6月16號發佈)不再支援 np.float ,無法調整類型。

    8)4.1.13.1 及之後版本,FINE_CONF_ENTITY 中新增參數 PythonConfig.metaFromMock,可控制 Python 算子的運作邏輯:

    注:一般情況下無需修改該值,使用者根據實際情況使用該參數。

    • 值預設為 false:使用上游算子預覽的資料,執行一次 Python 算子的程式碼得到 Python 算子匯出的元資料,再實際執行一次 Python 程式碼進行資料轉換。

    • 將值修改為 true(需重啟 FDL 工程):使用上游算子的元資料 mock 空資料,執行一次 Python 算子的程式碼得到 Python 算子匯出的元資料,再實際執行一次 Python 程式碼進行資料轉換。

    3. 前提條件

    使用「Python 算子」,需要準備 Python 環境。

    3.1 確定 Python 版本

    使用 Python 3.X版本。

    3.2 安裝必備包(必做)

    注:使用者需根據實際環境修改下方語句。

    Linux & Windows 環境中:

    1)安裝 pandas

    pip3 install pandas

    2)安裝 datetime

    pip3 install datetime

    注意點:

    pip 預設資源站為國外站,在國內,使用上述語句可能會下載較慢或報錯,可在安裝時指定 pip 源:

    範例語句:

    pip3 install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple

    國內常用的鏡像源:

    阿里雲:https://mirrors.aliyun.com/pypi/simple
    中國科學技術大學:http://pypi.mirrors.ustc.edu.cn/simple/
    豆瓣:https://pypi.douban.com/simple
    清華:https://pypi.tuna.tsinghua.edu.cn/simple/

    3.3 新增 python.properties 檔案(選做)

    python.properties 檔案中可自訂內容

    設定項
    說明
    python.workdir

    工作區間

    • 4.1.6.2 之前版本,預設為:%fdl_home%\webapps\webroot\WEB-INF\assist\python

    • 4.1.6.2 及之後版本,預設為%fdl_home%\webapps\webroot\WEB-INF\plugin\fdl_python

    python.cmd

    執行腳本,預設環境變數windows為python、linux為python3

    預設情況下:

    會使用環境變數中的 Python,不需要使用者額外配置 Python 路徑:

    • Linux 系統中若能識別python3命令行,FDL 也能識別

    • Windows 若能識別python命令行,FDL 也能識別

    自訂說明:

    1)Linux 範例

    python.cmd=/home/python/bin/python3

    2)Windows 範例

    python.cmd=E:\\Python3x\\python.exe

    注:Windows 中路徑為雙反斜槓 \\ 。

    python.concurrency

    python 執行緒併發數,預設 5

    python.timeout
    python 程式逾時時間,單位為s,預設1800s

    若使用者希望自訂表格中的設定項:

    1)建立資料夾

    4.1.6.2 之前版本:

    tomcat\webapps\webroot\WEB-INF\assist下建立 python\config 資料夾。

    4.1.6.2 及之後版本:

    tomcat\webapps\webroot\WEB-INF\plugin\fdl_python下建立 config 資料夾。

    2)put 命令 python.properties 檔案(修改 python.properties 檔案後,需要重啟工程,可做完本文 3.4 節操作後,再重啟工程)。

    python.properties 檔案(需根據實際情況修改):檔案範例.zip

    3.4 修改 finedb 配置項(必做)

    找到 FineDB 資料庫中的 fine_conf_entity 表,新增配置項 PythonConfig.enable ,值為 true 。修改方法請參見:手动修改fine_conf_entity;新增配置項後,需重啟工程

    4. 範例

    本章範例:取出 book 表中資料,使用 Python 腳本為每一本書生成編碼。

    4.1 取出 book 表資料

    1)建立定時任務,拖入「資料轉換」節點,進入「資料轉換」節點。

    2)拖入「DB表輸入」算子,取出 book 表資料。如下圖所示:

    4.2 設定 Python 算子

    1)拖入 Python 算子,編寫腳本,為每一本書生成編碼。

    注1:「DB表輸入」需點選生成。

    注2:Windows 中部署的 FDL 版本為 4.0.30 之前時,程式碼中不能出現雙引號;Windows 中部署的 FDL 版本為 4.0.30 及之後時 ,程式碼中支援出現雙引號。

    注3:若引用參數,參數引用格式為:${參數名}

    import pandas as pd
    # 必須使用 pandas 庫
     
    input = DB表輸入
     
    output =  input.assign(書本編碼=range(1, len(DB表輸入.title) + 1))
    # 新增新列並指派給預設匯出變數
    # 使用output變數指定當前算子的匯出

    2)點選「資料預覽」,可看到生成的「書本編碼」列。如下圖所示:

    4.2.5.3 版本支援除錯 Python,在 Python 算子中使用 print 語句,匯出後點選「程式碼運作結果」,即可檢查傳回資訊,調整  Python 程式碼,如下圖所示:

    同時「程式碼運作結果」會展示運作程式中的日誌,如下圖所示:

    4.3 匯出資料

    1)拖入「DB表匯出」算子,將資料匯出。如下圖所示:

    2)點選右上角「儲存」按鈕。

    4.4 效果查看

    任務執行成功後,生成的表資料如下圖所示:

    5. 拓展閱讀

    5.1 日誌說明

    使用者可在「任務控制>任務屬性>日誌等級設定」中,為定時任務單獨設定日誌匯出級別,滿足使用者按需查看日誌、除錯和排錯的需求。

    若需要詳細的日誌展示,在日誌等級設定中,選擇 INFO 即可。詳情請參見:日誌等級設定

    任務運作後,日誌Tab 下展示具體日誌:

    5.2 Python 算子記憶體佔用限制

    場景說明
    併發限制邏輯

    非容器化部署&容器化部署預覽預覽執行緒個數由 3.3 節 Python 配置檔案中的python.developConcurrency決定,預設為5
    運作運作執行緒個數由由 3.3 節 Python 配置檔案中的 python.concurrency決定,4.5.2.3 之前預設為5,之後預設為 1
    記憶體限制邏輯非容器化部署預覽

    校驗 Python 前置算子的資料量大小,Python 預覽執行緒總記憶體=系統剩餘記憶體*30%,然後平均分配給每個預覽執行緒。

    比如系統剩餘6g記憶體,Python 預覽執行緒一共可用1.8g。如果有3個預覽執行緒,每個預覽執行緒就限制0.6g,前置算子資料量超過0.6g就會預覽報錯

    運作

    校驗 Python 前置算子的資料量大小,Python 運作執行緒總記憶體=系統剩餘記憶體*50%,然後平均分配給每個運作執行緒。

    比如系統剩餘6g記憶體,Python 運作執行緒一共可用3g。如果有3個運作執行緒,每個運作執行緒就限制1g,前置算子資料量超過1g就會運作報錯

    容器化部署預覽容器化部署的FDL不校驗記憶體
    運作




    附件列表


    主题: 資料開發-定時任務
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!