You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by 瞿叶奇 <38...@qq.com> on 2021/02/04 09:53:21 UTC

pyflink的py4j里是不是可以调用我自己写的java程序 ?

请问如何实现pyflink的py4j调用我自己写的java程序 ?

回复: pyflink的py4j里是不是可以调用我自己写的java程序 ?

Posted by 瞿叶奇 <38...@qq.com>.
老师,您好,仍然不能加载java程序,报错如下:



&gt;&gt;&gt; from pyflink.util.utils import add_jars_to_context_class_loader
&gt;&gt;&gt; add_jars_to_context_class_loader(['file:///root/Test2.jar'])
&gt;&gt;&gt; from pyflink.java_gateway import get_gateway
&gt;&gt;&gt; get_gateway().jvm.Test2.Test2.main(None)
Traceback (most recent call last):
&nbsp; File "<stdin&gt;", line 1, in <module&gt;
&nbsp; File "/root/qyq_f/flink-1.12.0/opt/python/pyflink.zip/pyflink/util/exceptions.py", line 191, in wrapped_call
TypeError: Could not found the Java class 'Test2.Test2.main'. The Java dependencies could be specified via command line argument '--jarfile' or the config option 'pipeline.jars'
&gt;&gt;&gt; get_gateway().jvm.Test2.main(None)
Traceback (most recent call last):
&nbsp; File "<stdin&gt;", line 1, in <module&gt;
&nbsp; File "/root/qyq_f/flink-1.12.0/opt/python/pyflink.zip/pyflink/util/exceptions.py", line 191, in wrapped_call
TypeError: Could not found the Java class 'Test2.main'. The Java dependencies could be specified via command line argument '--jarfile' or the config option 'pipeline.jars'
&gt;&gt;&gt; get_gateway().jvm.Test2.main()
Traceback (most recent call last):
&nbsp; File "<stdin&gt;", line 1, in <module&gt;
&nbsp; File "/root/qyq_f/flink-1.12.0/opt/python/pyflink.zip/pyflink/util/exceptions.py", line 191, in wrapped_call
TypeError: Could not found the Java class 'Test2.main'. The Java dependencies could be specified via command line argument '--jarfile' or the config option 'pipeline.jars'

但是存在main函数:

&gt;&gt;&gt; get_gateway().jvm.Test2.main
<py4j.java_gateway.JavaPackage object at 0x7ff901d7efd0&gt;





------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "user-zh"                                                                                    <weizhong0618@gmail.com&gt;;
发送时间:&nbsp;2021年2月5日(星期五) 晚上7:06
收件人:&nbsp;"瞿叶奇"<389243409@qq.com&gt;;
抄送:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;
主题:&nbsp;Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?



尝试调用:
get_gateway().jvm.Test2.Test2.main(None)

&gt; 在 2021年2月5日,18:27,瞿叶奇 <389243409@qq.com&gt; 写道:
&gt; 
&gt; 老师,您好,列表参数就不在报错,但是还是没有加载进去。
&gt; &gt;&gt;&gt; from pyflink.util.utils import add_jars_to_context_class_loader
&gt; &gt;&gt;&gt; add_jars_to_context_class_loader(['file:///root/Test2.jar <file:///root/Test2.jar&gt;']) 
&gt; &gt;&gt;&gt; from pyflink.java_gateway import get_gateway
&gt; &gt;&gt;&gt; get_gateway().jvm.Test2.main()
&gt; Traceback (most recent call last):
&gt;&nbsp;&nbsp; File "<stdin&gt;", line 1, in <module&gt;
&gt;&nbsp;&nbsp; File "/root/qyq_f/flink-1.12.0/opt/python/pyflink.zip/pyflink/util/exceptions.py", line 191, in wrapped_call
&gt; TypeError: Could not found the Java class 'Test2.main'. The Java dependencies could be specified via command line argument '--jarfile' or the config option 'pipeline.jars'
&gt; java code:
&gt; package Test2;
&gt; public class Test2 {
&gt;&nbsp;&nbsp;&nbsp;&nbsp; public int add(int a, int b) {
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a + b;
&gt;&nbsp;&nbsp;&nbsp;&nbsp; }
&gt; 
&gt;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[] args) {
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int a = 1;
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int b = 2;
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Test2 t2=new Test2();
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int c=t2.add(a,b);
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(c);
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&gt; }
&gt; 
&gt; 
&gt; ------------------ 原始邮件 ------------------
&gt; 发件人:&nbsp; "user-zh" <weizhong0618@gmail.com <mailto:weizhong0618@gmail.com&gt;&gt;;
&gt; 发送时间: 2021年2月5日(星期五) 晚上6:01
&gt; 收件人: "user-zh"<user-zh@flink.apache.org <mailto:user-zh@flink.apache.org&gt;&gt;;
&gt; 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
&gt; 
&gt; 图片似乎无法加载,不过我猜应该是参数类型问题?这个函数需要参数类型为List:
&gt; add_jars_to_context_class_loader(["file:///xxx <file:///xxx&gt; <file:///xxx <file:///xxx&gt;&gt;"])
&gt; 
&gt; &gt; 在 2021年2月5日,17:48,瞿叶奇 <389243409@qq.com&gt; 写道:
&gt; &gt; 
&gt; &gt; 老师,您好,
&gt; &gt; 我升级到了flink1.12.0了,用这个函数加载类报错了,是我url写的有问题吗?pyfink有没有连接hdfs认证kerberos的方法呢?
&gt; &gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; ------------------ 原始邮件 ------------------
&gt; &gt; 发件人: "user-zh" <weizhong0618@gmail.com&gt;;
&gt; &gt; 发送时间: 2021年2月5日(星期五) 下午3:53
&gt; &gt; 收件人: "user-zh"<user-zh@flink.apache.org&gt;;
&gt; &gt; 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
&gt; &gt; 
&gt; &gt; Hi,
&gt; &gt; 
&gt; &gt; 首先你需要将你的java程序打成jar包,之后热加载你的jar包, 目前pyflink里有一个util方法可以直接调用:
&gt; &gt; from pyflink.util.utils import add_jars_to_context_class_loader
&gt; &gt; add_jars_to_context_class_loader("file:///xxx <file:///xxx&gt;") # 注意需要是url格式的路径
&gt; &gt; 
&gt; &gt; 然后就能通过java gateway进行调用了:
&gt; &gt; from pyflink.java_gateway import get_gateway
&gt; &gt; get_gateway().jvm.your.class.name.main()
&gt; &gt; 
&gt; &gt; 注意这个util方法是在较新的版本里才有,你可能需要升级一下pyflink版本
&gt; &gt; 
&gt; &gt; &gt; 在 2021年2月5日,10:48,瞿叶奇 <389243409@qq.com&gt; 写道:
&gt; &gt; &gt; 
&gt; &gt; &gt; 老师,我想用java jvm认证kerberos程序,供给pyflink使用,就是说如果是函数的话,就只是个调用的无输入函数,怎么样才能做到?
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; ------------------&amp;nbsp;原始邮件&amp;nbsp;------------------
&gt; &gt; &gt; 发件人:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "user-zh"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <hxbks2ks@gmail.com <mailto:hxbks2ks@gmail.com&gt;&amp;gt;;
&gt; &gt; &gt; 发送时间:&amp;nbsp;2021年2月5日(星期五) 上午10:35
&gt; &gt; &gt; 收件人:&amp;nbsp;"user-zh"<user-zh@flink.apache.org <mailto:user-zh@flink.apache.org&gt;&amp;gt;;
&gt; &gt; &gt; 
&gt; &gt; &gt; 主题:&amp;nbsp;Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; Hi,
&gt; &gt; &gt; 
&gt; &gt; &gt; 你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]
&gt; &gt; &gt; 
&gt; &gt; &gt; [1]
&gt; &gt; &gt; https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions <https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions&gt;
&gt; &gt; &gt; 
&gt; &gt; &gt; Best,
&gt; &gt; &gt; Xingbo
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; 瞿叶奇 <389243409@qq.com <mailto:389243409@qq.com&gt;&amp;gt; 于2021年2月4日周四 下午5:53写道:
&gt; &gt; &gt; 
&gt; &gt; &gt; &amp;gt; 请问如何实现pyflink的py4j调用我自己写的java程序 ?
&gt; &gt; 
&gt; &gt;

Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?

Posted by Wei Zhong <we...@gmail.com>.
尝试调用:
get_gateway().jvm.Test2.Test2.main(None)

> 在 2021年2月5日,18:27,瞿叶奇 <38...@qq.com> 写道:
> 
> 老师,您好,列表参数就不在报错,但是还是没有加载进去。
> >>> from pyflink.util.utils import add_jars_to_context_class_loader
> >>> add_jars_to_context_class_loader(['file:///root/Test2.jar <file:///root/Test2.jar>']) 
> >>> from pyflink.java_gateway import get_gateway
> >>> get_gateway().jvm.Test2.main()
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "/root/qyq_f/flink-1.12.0/opt/python/pyflink.zip/pyflink/util/exceptions.py", line 191, in wrapped_call
> TypeError: Could not found the Java class 'Test2.main'. The Java dependencies could be specified via command line argument '--jarfile' or the config option 'pipeline.jars'
> java code:
> package Test2;
> public class Test2 {
>     public int add(int a, int b) {
>         return a + b;
>     }
> 
>     public static void main(String[] args) {
>             int a = 1;
>             int b = 2;
>             Test2 t2=new Test2();
>             int c=t2.add(a,b);
>             System.out.print(c);
>         }
> }
> 
> 
> ------------------ 原始邮件 ------------------
> 发件人:  "user-zh" <weizhong0618@gmail.com <ma...@gmail.com>>;
> 发送时间: 2021年2月5日(星期五) 晚上6:01
> 收件人: "user-zh"<user-zh@flink.apache.org <ma...@flink.apache.org>>;
> 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
> 
> 图片似乎无法加载,不过我猜应该是参数类型问题?这个函数需要参数类型为List:
> add_jars_to_context_class_loader(["file:///xxx <file:///xxx> <file:///xxx <file:///xxx>>"])
> 
> > 在 2021年2月5日,17:48,瞿叶奇 <38...@qq.com> 写道:
> > 
> > 老师,您好,
> > 我升级到了flink1.12.0了,用这个函数加载类报错了,是我url写的有问题吗?pyfink有没有连接hdfs认证kerberos的方法呢?
> > 
> > 
> > 
> > 
> > ------------------ 原始邮件 ------------------
> > 发件人: "user-zh" <we...@gmail.com>;
> > 发送时间: 2021年2月5日(星期五) 下午3:53
> > 收件人: "user-zh"<us...@flink.apache.org>;
> > 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
> > 
> > Hi,
> > 
> > 首先你需要将你的java程序打成jar包,之后热加载你的jar包, 目前pyflink里有一个util方法可以直接调用:
> > from pyflink.util.utils import add_jars_to_context_class_loader
> > add_jars_to_context_class_loader("file:///xxx <file:///xxx>") # 注意需要是url格式的路径
> > 
> > 然后就能通过java gateway进行调用了:
> > from pyflink.java_gateway import get_gateway
> > get_gateway().jvm.your.class.name.main()
> > 
> > 注意这个util方法是在较新的版本里才有,你可能需要升级一下pyflink版本
> > 
> > > 在 2021年2月5日,10:48,瞿叶奇 <38...@qq.com> 写道:
> > > 
> > > 老师,我想用java jvm认证kerberos程序,供给pyflink使用,就是说如果是函数的话,就只是个调用的无输入函数,怎么样才能做到?
> > > 
> > > 
> > > 
> > > 
> > > ------------------&nbsp;原始邮件&nbsp;------------------
> > > 发件人:                                                                                                                        "user-zh"                                                                                    <hxbks2ks@gmail.com <ma...@gmail.com>&gt;;
> > > 发送时间:&nbsp;2021年2月5日(星期五) 上午10:35
> > > 收件人:&nbsp;"user-zh"<user-zh@flink.apache.org <ma...@flink.apache.org>&gt;;
> > > 
> > > 主题:&nbsp;Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
> > > 
> > > 
> > > 
> > > Hi,
> > > 
> > > 你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]
> > > 
> > > [1]
> > > https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions <https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions>
> > > 
> > > Best,
> > > Xingbo
> > > 
> > > 
> > > 瞿叶奇 <389243409@qq.com <ma...@qq.com>&gt; 于2021年2月4日周四 下午5:53写道:
> > > 
> > > &gt; 请问如何实现pyflink的py4j调用我自己写的java程序 ?
> > 
> > 


回复: pyflink的py4j里是不是可以调用我自己写的java程序 ?

Posted by 瞿叶奇 <38...@qq.com>.
老师,您好,列表参数就不在报错,但是还是没有加载进去。
&gt;&gt;&gt; from pyflink.util.utils import add_jars_to_context_class_loader
&gt;&gt;&gt; add_jars_to_context_class_loader(['file:///root/Test2.jar'])&nbsp;
&gt;&gt;&gt; from pyflink.java_gateway import get_gateway
&gt;&gt;&gt; get_gateway().jvm.Test2.main()
Traceback (most recent call last):
&nbsp; File "<stdin&gt;", line 1, in <module&gt;
&nbsp; File "/root/qyq_f/flink-1.12.0/opt/python/pyflink.zip/pyflink/util/exceptions.py", line 191, in wrapped_call
TypeError: Could not found the Java class 'Test2.main'. The Java dependencies could be specified via command line argument '--jarfile' or the config option 'pipeline.jars'

java code:
package Test2;
public class Test2 {
    public int add(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) {
            int a = 1;
            int b = 2;
            Test2 t2=new Test2();
            int c=t2.add(a,b);
            System.out.print(c);
        }
}




------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "user-zh"                                                                                    <weizhong0618@gmail.com&gt;;
发送时间:&nbsp;2021年2月5日(星期五) 晚上6:01
收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;

主题:&nbsp;Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?



图片似乎无法加载,不过我猜应该是参数类型问题?这个函数需要参数类型为List:
add_jars_to_context_class_loader(["file:///xxx <file:///xxx&gt;"])

&gt; 在 2021年2月5日,17:48,瞿叶奇 <389243409@qq.com&gt; 写道:
&gt; 
&gt; 老师,您好,
&gt; 我升级到了flink1.12.0了,用这个函数加载类报错了,是我url写的有问题吗?pyfink有没有连接hdfs认证kerberos的方法呢?
&gt; 
&gt; 
&gt; 
&gt; 
&gt; ------------------ 原始邮件 ------------------
&gt; 发件人: "user-zh" <weizhong0618@gmail.com&gt;;
&gt; 发送时间: 2021年2月5日(星期五) 下午3:53
&gt; 收件人: "user-zh"<user-zh@flink.apache.org&gt;;
&gt; 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
&gt; 
&gt; Hi,
&gt; 
&gt; 首先你需要将你的java程序打成jar包,之后热加载你的jar包, 目前pyflink里有一个util方法可以直接调用:
&gt; from pyflink.util.utils import add_jars_to_context_class_loader
&gt; add_jars_to_context_class_loader("file:///xxx <file:///xxx&gt;") # 注意需要是url格式的路径
&gt; 
&gt; 然后就能通过java gateway进行调用了:
&gt; from pyflink.java_gateway import get_gateway
&gt; get_gateway().jvm.your.class.name.main()
&gt; 
&gt; 注意这个util方法是在较新的版本里才有,你可能需要升级一下pyflink版本
&gt; 
&gt; &gt; 在 2021年2月5日,10:48,瞿叶奇 <389243409@qq.com&gt; 写道:
&gt; &gt; 
&gt; &gt; 老师,我想用java jvm认证kerberos程序,供给pyflink使用,就是说如果是函数的话,就只是个调用的无输入函数,怎么样才能做到?
&gt; &gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; ------------------&amp;nbsp;原始邮件&amp;nbsp;------------------
&gt; &gt; 发件人:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "user-zh"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <hxbks2ks@gmail.com&amp;gt;;
&gt; &gt; 发送时间:&amp;nbsp;2021年2月5日(星期五) 上午10:35
&gt; &gt; 收件人:&amp;nbsp;"user-zh"<user-zh@flink.apache.org&amp;gt;;
&gt; &gt; 
&gt; &gt; 主题:&amp;nbsp;Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
&gt; &gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; Hi,
&gt; &gt; 
&gt; &gt; 你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]
&gt; &gt; 
&gt; &gt; [1]
&gt; &gt; https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions
&gt; &gt; 
&gt; &gt; Best,
&gt; &gt; Xingbo
&gt; &gt; 
&gt; &gt; 
&gt; &gt; 瞿叶奇 <389243409@qq.com&amp;gt; 于2021年2月4日周四 下午5:53写道:
&gt; &gt; 
&gt; &gt; &amp;gt; 请问如何实现pyflink的py4j调用我自己写的java程序 ?
&gt; 
&gt;

Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?

Posted by Wei Zhong <we...@gmail.com>.
图片似乎无法加载,不过我猜应该是参数类型问题?这个函数需要参数类型为List:
add_jars_to_context_class_loader(["file:///xxx <file:///xxx>"])

> 在 2021年2月5日,17:48,瞿叶奇 <38...@qq.com> 写道:
> 
> 老师,您好,
> 我升级到了flink1.12.0了,用这个函数加载类报错了,是我url写的有问题吗?pyfink有没有连接hdfs认证kerberos的方法呢?
> 
> 
> 
> 
> ------------------ 原始邮件 ------------------
> 发件人: "user-zh" <we...@gmail.com>;
> 发送时间: 2021年2月5日(星期五) 下午3:53
> 收件人: "user-zh"<us...@flink.apache.org>;
> 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
> 
> Hi,
> 
> 首先你需要将你的java程序打成jar包,之后热加载你的jar包, 目前pyflink里有一个util方法可以直接调用:
> from pyflink.util.utils import add_jars_to_context_class_loader
> add_jars_to_context_class_loader("file:///xxx <file:///xxx>") # 注意需要是url格式的路径
> 
> 然后就能通过java gateway进行调用了:
> from pyflink.java_gateway import get_gateway
> get_gateway().jvm.your.class.name.main()
> 
> 注意这个util方法是在较新的版本里才有,你可能需要升级一下pyflink版本
> 
> > 在 2021年2月5日,10:48,瞿叶奇 <38...@qq.com> 写道:
> > 
> > 老师,我想用java jvm认证kerberos程序,供给pyflink使用,就是说如果是函数的话,就只是个调用的无输入函数,怎么样才能做到?
> > 
> > 
> > 
> > 
> > ------------------&nbsp;原始邮件&nbsp;------------------
> > 发件人:                                                                                                                        "user-zh"                                                                                    <hxbks2ks@gmail.com&gt;;
> > 发送时间:&nbsp;2021年2月5日(星期五) 上午10:35
> > 收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;
> > 
> > 主题:&nbsp;Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
> > 
> > 
> > 
> > Hi,
> > 
> > 你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]
> > 
> > [1]
> > https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions
> > 
> > Best,
> > Xingbo
> > 
> > 
> > 瞿叶奇 <389243409@qq.com&gt; 于2021年2月4日周四 下午5:53写道:
> > 
> > &gt; 请问如何实现pyflink的py4j调用我自己写的java程序 ?
> 
> 


回复: pyflink的py4j里是不是可以调用我自己写的java程序 ?

Posted by 瞿叶奇 <38...@qq.com>.
老师,您好,
我升级到了flink1.12.0了,用这个函数加载类报错了,是我url写的有问题吗?pyfink有没有连接hdfs认证kerberos的方法呢?







------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "user-zh"                                                                                    <weizhong0618@gmail.com&gt;;
发送时间:&nbsp;2021年2月5日(星期五) 下午3:53
收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;

主题:&nbsp;Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?



Hi,

首先你需要将你的java程序打成jar包,之后热加载你的jar包, 目前pyflink里有一个util方法可以直接调用:
from pyflink.util.utils import add_jars_to_context_class_loader
add_jars_to_context_class_loader("file:///xxx <file:///xxx&gt;") # 注意需要是url格式的路径

然后就能通过java gateway进行调用了:
from pyflink.java_gateway import get_gateway
get_gateway().jvm.your.class.name.main()

注意这个util方法是在较新的版本里才有,你可能需要升级一下pyflink版本

&gt; 在 2021年2月5日,10:48,瞿叶奇 <389243409@qq.com&gt; 写道:
&gt; 
&gt; 老师,我想用java jvm认证kerberos程序,供给pyflink使用,就是说如果是函数的话,就只是个调用的无输入函数,怎么样才能做到?
&gt; 
&gt; 
&gt; 
&gt; 
&gt; ------------------&amp;nbsp;原始邮件&amp;nbsp;------------------
&gt; 发件人:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "user-zh"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <hxbks2ks@gmail.com&amp;gt;;
&gt; 发送时间:&amp;nbsp;2021年2月5日(星期五) 上午10:35
&gt; 收件人:&amp;nbsp;"user-zh"<user-zh@flink.apache.org&amp;gt;;
&gt; 
&gt; 主题:&amp;nbsp;Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
&gt; 
&gt; 
&gt; 
&gt; Hi,
&gt; 
&gt; 你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]
&gt; 
&gt; [1]
&gt; https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions
&gt; 
&gt; Best,
&gt; Xingbo
&gt; 
&gt; 
&gt; 瞿叶奇 <389243409@qq.com&amp;gt; 于2021年2月4日周四 下午5:53写道:
&gt; 
&gt; &amp;gt; 请问如何实现pyflink的py4j调用我自己写的java程序 ?

Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?

Posted by Wei Zhong <we...@gmail.com>.
Hi,

首先你需要将你的java程序打成jar包,之后热加载你的jar包, 目前pyflink里有一个util方法可以直接调用:
from pyflink.util.utils import add_jars_to_context_class_loader
add_jars_to_context_class_loader("file:///xxx <file:///xxx>") # 注意需要是url格式的路径

然后就能通过java gateway进行调用了:
from pyflink.java_gateway import get_gateway
get_gateway().jvm.your.class.name.main()

注意这个util方法是在较新的版本里才有,你可能需要升级一下pyflink版本

> 在 2021年2月5日,10:48,瞿叶奇 <38...@qq.com> 写道:
> 
> 老师,我想用java jvm认证kerberos程序,供给pyflink使用,就是说如果是函数的话,就只是个调用的无输入函数,怎么样才能做到?
> 
> 
> 
> 
> ------------------&nbsp;原始邮件&nbsp;------------------
> 发件人:                                                                                                                        "user-zh"                                                                                    <hxbks2ks@gmail.com&gt;;
> 发送时间:&nbsp;2021年2月5日(星期五) 上午10:35
> 收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;
> 
> 主题:&nbsp;Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
> 
> 
> 
> Hi,
> 
> 你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]
> 
> [1]
> https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions
> 
> Best,
> Xingbo
> 
> 
> 瞿叶奇 <389243409@qq.com&gt; 于2021年2月4日周四 下午5:53写道:
> 
> &gt; 请问如何实现pyflink的py4j调用我自己写的java程序 ?


回复: pyflink的py4j里是不是可以调用我自己写的java程序 ?

Posted by 瞿叶奇 <38...@qq.com>.
老师,我想用java jvm认证kerberos程序,供给pyflink使用,就是说如果是函数的话,就只是个调用的无输入函数,怎么样才能做到?




------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "user-zh"                                                                                    <hxbks2ks@gmail.com&gt;;
发送时间:&nbsp;2021年2月5日(星期五) 上午10:35
收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;

主题:&nbsp;Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?



Hi,

你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]

[1]
https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions

Best,
Xingbo


瞿叶奇 <389243409@qq.com&gt; 于2021年2月4日周四 下午5:53写道:

&gt; 请问如何实现pyflink的py4j调用我自己写的java程序 ?

Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?

Posted by Xingbo Huang <hx...@gmail.com>.
Hi,

你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]

[1]
https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions

Best,
Xingbo


瞿叶奇 <38...@qq.com> 于2021年2月4日周四 下午5:53写道:

> 请问如何实现pyflink的py4j调用我自己写的java程序 ?