最新历史版本 :Python 算子 返回文檔
編輯時間: 內容長度:图片数:目录数: 修改原因:

目錄:

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不校驗記憶體
運作