最近社区Github最火的issue #8542
"添加 Python 脚本工具进行Transform" —— 这个被疯狂+1的需求值得被更多大神知道!现在正是参与贡献的最佳时机,你的代码可能就出现在下个正式版本中!
本Issue由社区 PMC @liugddx
提出,目前处于讨论阶段,想参与的请下滑查看详情!
Python党的福音
在Apache 里 添加 Python 脚本工具进行Transform
技术方案预览
当前采用Py4J实现Java-Python双行道:原理如下,支持Java
和Python
客户端双向通信, 实现如下需求:
SeaTunnel Transform启动时,Java端会启动一个常驻进程,代码如下
GatewayServer gatewayServer = new GatewayServer(new ExampleJava());gatewayServer.start();
ExampleJava
提供了以下基本 SeatunnelRow
操作的封装。
现在已经启动了一个 Java 服务器,接下来需要启动一个 Python 客户端来连接 Java 服务器
gateway = JavaGateway( callback_server_parameters=CallbackServerParameters() ) # 获取 Java 对象 其实就是ExampleJava2 java_app = gateway.entry_point
假设在 Java 端有一个getPython()
方法,提供用户配置的 Python 代码
public String getPythonCode(){ return "import numpy as np;\n" + "print(np.array([1, 2, 3]));print(\"[Python] 这是 Java 传入的代码!java_app.callPythonMethod(1, 1.1)\");java_app.callPythonMethod(1, 1.1)"; }
# 在python 处申明java对象 java_list = gateway.jvm.java.util.ArrayList() java_list.append(1) java_list.append(2) java_app.addList(1,java_list) # 在python 处申明java对象 my_object = gateway.jvm.com.example.MyObject("test", 123) java_app.addObject(1,my_object); try: ## 执行 java段给定的自定义代码 exec(java_app.getPythonCode()) # 动态执行 Python 代码 except Exception as e: print(f"[Python] 代码执行出错: {e}")
由于代码篇幅过长,可直接访问issue
链接查看。
手把手教你如何提交一个PR:
(进入贡献群加小助手微信:seatunnel1)
认领任务
参与讨论获取适合你的专属任务
大佬直通车
跟随社区大佬开始搞事!
如果你对这个功能非常感兴趣,参与讨论认领任务吧?现在加入,你就是这个功能的联合创始人!
本文由 科技 提供发布支持!