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.1 | FINE_CONF_ENTITY 中新增參數 PythonConfig.metaFromMock,可控制 Python 算子的運作邏輯 |
4.2.5.3 |
|
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
2)安裝 datetime
注意點:
pip 預設資源站為國外站,在國內,使用上述語句可能會下載較慢或報錯,可在安裝時指定 pip 源:
範例語句:
國內常用的鏡像源:
阿里雲: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 | 工作區間
|
python.cmd | 執行腳本,預設環境變數windows為python、linux為python3 預設情況下: 會使用環境變數中的 Python,不需要使用者額外配置 Python 路徑:
自訂說明: 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:若引用參數,參數引用格式為:${參數名}
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不校驗記憶體 | |
運作 |