Python 便携插件扩展示例
以下为pysam插件示例的介绍及打包过程,pysam插件可通过算法集成的便捷插件页签,点击下载便携插件示例获取。
部署要求
使用Python 便携插件,需要有 Python3 环境。
如果您通过安装包的方式安装 NeuronEX ,则需要
- 手动安装 python 3.x 环境。
- 通过 pip 安装
ekuiper
和pynng
库
shellpip install ekuiper pynng
如果您通过 docker 的方式安装 NeuronEX ,请使用 neuronex:3.x.x 类型的 NeuronEX 镜像,该镜像已经包含了 Python3 环境,以及一些相关的函数库。
pysam插件整体介绍
pysam插件的目录内包含如下文件:
pysam.json
:必需,插件元数据文件,用于描述插件的元数据信息。pysam.py
:必需,插件主程序可执行文件。pyjson.py
:可选,插件中的一个数据源Source插件。sources文件夹、pyjson.json、pyjson.yaml
:可选,插件中的数据源Source插件pyjson.py
的配置信息。print.py
:可选,插件中的一个动作Sink插件。sinks文件夹、print.json
:可选,插件中的动作Sink插件print.py
的配置信息。revert.py
:可选,插件中的一个函数Function插件。functions文件夹、revert.json
:可选,插件中的函数Function插件revert.py
的配置信息。
提示
一个插件可以包含一个或多个数据源Source、动作Sink和函数Function插件,在pysam示例中包含了一个数据源Source插件pyjson
、一个动作Sink插件print
和一个函数插件revert
。
插件元数据文件介绍
pysam.json
文件是插件的元数据文件,用于描述插件的元数据信息。以下是元数据文件中的关键信息介绍:
language
:该字段指定了插件实现的语言,插件必须以单一语言实现,python类型插件填入python
。executable
:字段需要指定了插件主程序可执行文件的名称。在本例中为pysam.py
文件。
提示
此pysam.py
文件名并不必需要与插件的元数据文件pysam.json
重名。比如可在executable
字段填入main.py
,将pysam.py
重命名为main.py
亦可。
sources
:该字段为数组格式,包含了插件中的所有数据源Source插件信息。sinks
:该字段为数组格式,包含了插件中的所有动作Sink插件信息。functions
:该字段为数组格式,包含了插件中的所有函数Function插件信息。
{
"version": "v1.0.0",
"language": "python",
"executable": "pysam.py",
"sources": [
"pyjson"
],
"sinks": [
"print"
],
"functions": [
"revert"
]
}
提示
pysam.json
文件是插件的元数据文件,文件名称pysam
必须与 NeuronEX Dashboard上数据处理 -> 扩展 -> 便携插件页签上,点击创建便携插件时填入的插件名称
相同。
插件主程序介绍
在该示例中,pysam.py
文件是插件的主程序可执行文件,该文件中包含了插件的主程序逻辑,将具体的数据源Source、动作Sink和函数Function插件进行插件配置及注册。
from ekuiper import plugin, PluginConfig
from print import PrintSink
from pyjson import PyJson
from revert import revertIns
if __name__ == '__main__':
c = PluginConfig("pysam", {"pyjson": lambda: PyJson()}, {"print": lambda: PrintSink()},
{"revert": lambda: revertIns})
plugin.start(c)
具体插件实现介绍
在该示例中,pyjson.py
文件是插件中的一个数据源Source插件,print.py
文件是插件中的一个动作Sink插件,revert.py
文件是插件中的一个函数Function插件。以函数Function插件revert.py
为例,通过在revert.py
文件中的exec
函数,实现自定义的功能需求。
from typing import Any, List
from ekuiper import Function, Context
class RevertFunc(Function):
def __init__(self):
pass
def validate(self, args: List[Any]):
return ""
def exec(self, args: List[Any], ctx: Context):
return args[0][::-1]
def is_aggregate(self):
return False
revertIns = RevertFunc()
插件打包及安装
在完成插件开发后,我们需要将结果打包成zip进行安装。在pysam.json
的同级目录下,执行以下命令进行打包:
zip -r pysam.zip ./*
通过以上命令,将会在当前目录下生成pysam.zip
文件,该文件即为我们需要安装的插件包,在便携插件页签,点击创建便携插件。在弹出的窗口输入插件名称pysam
,上传插件pysam.zip
,即可完成插件的安装。
插件安装完成后,会在插件列表显示插件的详细信息,如下:
提示
在安装完插件后,NeuronEX不需要重启,即可正常使用插件功能。
插件使用示例
在数据源Source中使用插件
在源管理页面,点击创建流,即可选择pysam插件作为自定义数据源使用。
在SQL中使用插件
在规则页面,点击新建规则,即可在规则SQL中直接调用自定义函数revert
,在该示例中,revert
函数从demoStream
流中获取device_name
字段的值,并实现了字符串反转的功能输出到result
字段。
SELECT revert(device_name) as result FROM demoStream
假设demoStream
流中的输入数据如下:
{
"device_name": "abcdefg"
}
则,规则输出数据如下:
{
"result": "gfedcba"
}
在动作Sink中使用插件
在添加动作页面,即可选择print插件作为自定义动作使用。
其他
其他插件可选项
用户可以在插件目录下添加install.sh
文件以及requirements.txt
文件,插件在安装时,会自动执行install.sh
脚本,安装插件所需的依赖库。
install.sh
文件示例如下:
cur=$(dirname "$0")
echo "Base path $cur"
pip install -r $cur/requirements.txt
echo "Done"
requirements.txt
文件示例如下:
numpy==1.22.3
scipy==1.8.0
提示
用户可以在插件目录下添加相应的算法模型文件,如model.pkl
文件,在插件python代码中可直接调用该模型文件。