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\plugins\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\plugins\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 版本。
如果 FDL 所部署系统(镜像)中没有 Python 环境则无法使用,需要手动安装 Python 环境或更换带有 Python 环境的镜像。可以进入系统输入通过如下命令查看:
python --version
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 环境,通常建议单独创建一个P ython 环境,并通过此处的设置让 FDL 使用这个单独的 Python 环境。
设置项 | 说明 |
---|---|
python.workdir | 工作目录
|
python.cmd | 指定使用的 python 环境的路径,默认环境变量 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\plugins\fdl_python下新建 config 文件夹。
2)放入 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 问题说明
1)如果执行之后提示错误,显示脚本缺失或不存在文件夹,一般是由于权限引起的,需要将 plugins/fdl_python 的目录权限更改为777。
2)较为新的 Linux 系统版本在使用PIP安装包时,会提示 "error: externally-managed-environment"错误,建议安装单独的 Python 作为 FDL 的 Python 运行环境然后通过对应环境的 PIP 来安装所需要的包。
5.2 日志说明
用户可在「任务控制>任务属性>日志等级设置」中,为定时任务单独设置日志输出级别,满足用户按需查看日志、调试和排错的需求。
若需要详细的日志展示,在「日志等级设置」中,选择 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不校验内存 | |
运行 |