Hi, 是这个问题了,成功了,不清楚为什么要把UDF的解释器分开配置
Thx 在 2022-06-08 13:29:48,"Dian Fu" <dian0511...@gmail.com> 写道: >有两个参数指定Python解释器: >1)-pyexec,指定的是作业执行过程中,用来运行Python UDF的Python解释器路径 >2)-pyclientexec,指定客户端编译作业的时候,用到的Python解释器路径,具体信息可以看一下: >https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/python/dependency_management/#python-interpreter-of-client > >可以把这个参数-pyclientexec 也加上试试。 > >On Tue, Jun 7, 2022 at 11:24 AM RS <tinyshr...@163.com> wrote: > >> Hi, >> >> >> 环境: >> - flink-1.14.3, 单机集群 >> - 服务器上默认python2,也存在python3.6.8 >> - /xxx/bin/python3是python3生成的虚拟环境 >> >> >> 使用sql-client测试pyflink的udf,自定义了一个函数f1,/xxx/p.py >> 启动命令: >> ./bin/sql-client.sh -pyfs file:///xxx/p.py -pyexec /xxx/bin/python3 >> 配置pyexec指定了使用的python为python3 >> >> >> 执行命令报错,报错信息如下: >> Flink SQL> create temporary function fun1 as 'p.f1' language python; >> [INFO] Execute statement succeed. >> Flink SQL> select fun1('a',1,'s'); >> Traceback (most recent call last): >> File "/usr/lib64/python2.7/runpy.py", line 151, in _run_module_as_main >> mod_name, loader, code, fname = _get_module_details(mod_name) >> File "/usr/lib64/python2.7/runpy.py", line 101, in _get_module_details >> loader = get_loader(mod_name) >> File "/usr/lib64/python2.7/pkgutil.py", line 464, in get_loader >> return find_loader(fullname) >> File "/usr/lib64/python2.7/pkgutil.py", line 474, in find_loader >> for importer in iter_importers(fullname): >> File "/usr/lib64/python2.7/pkgutil.py", line 430, in iter_importers >> __import__(pkg) >> File "/home/flink-1.14.3/opt/python/pyflink.zip/pyflink/__init__.py", >> line 26, in <module> >> RuntimeError: Python versions prior to 3.6 are not supported for PyFlink >> [sys.version_info(major=2, minor=7, micro=5, releaselevel='final', >> serial=0)]. >> [ERROR] Could not execute SQL statement. Reason: >> java.lang.IllegalStateException: Instantiating python function 'p.f1' >> failed. >> >> >> 报错提示中使用到的是python2,不是参数里面配置的python3,如何让pyexec生效? >> >> >> Thx