写点什么

最近社区热议的 issue #8542,被疯狂 +1 的需求急需你的加入!

  • 2025-02-12
    广东
  • 本文字数:1063 字

    阅读完需:约 3 分钟

最近社区 Github 最火的 issue #8542 "添加 Python 脚本工具进行 Transform" —— 这个被疯狂+1 的需求值得被更多大神知道!现在正是参与贡献的最佳时机,你的代码可能就出现在下个正式版本中!


issue 链接:https://github.com/apache/seatunnel/issues/8542


本 Issue 由社区 PMC @liugddx 提出,目前处于讨论阶段,想参与的请下滑查看详情!

这个功能到底要做什么?

🐍 Python 党的福音

在 Apache SeaTunnel 里 添加 Python 脚本工具进行 Transform

来自社区 @FuYouJ 的提案

🔌 技术方案预览

当前采用 Py4J 实现 Java-Python 双行道:原理如下,支持JavaPython客户端双向通信,实现如下需求:

启动进程

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 中执行 Python 代码?

假设在 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)

认领任务

参与讨论获取适合你的专属任务

大佬直通车

跟随社区大佬开始搞事!


如果你对这个功能非常感兴趣,参与讨论认领任务吧?现在加入,你就是这个功能的联合创始人!😄

用户头像

还未添加个人签名 2022-03-07 加入

Apache SeaTunnel(Incubating) 是一个分布式、高性能、易扩展、用于海量数据(离线&实时)同步和转化的数据集成平台。

评论

发布
暂无评论
最近社区热议的issue #8542,被疯狂+1的需求急需你的加入!_Apache SeaTunnel_InfoQ写作社区