大数据计算MaxCompute odps script 调用UDF函数没问题,但是在pyodps中调用udf函数报错
ScriptError: ODPS-0123055: InstanceId: 20230809084802771gotqe4
ODPS-0123055:Script exception - Traceback (most recent call last):
File "/home/admin/calculate_oil_dilution_rate.py", line 56, in init
from odps_bak import ODPS
File "work/odps_bak.zip/odps_bak/init.py", line 24, in <module>
from .core import ODPS
File "work/odps_bak.zip/odps_bak/core.py", line 22, in <module>
from .rest import RestClient
File "work/odps_bak.zip/odps_bak/rest.py", line 24, in <module>
import requests
File "work/requests.zip/requests/init.py", line 45, in <module>
from .exceptions import RequestsDependencyWarning
File "work/requests.zip/requests/exceptions.py", line 9, in <module>
from .compat import JSONDecodeError as CompatJSONDecodeError
File "work/requests.zip/requests/compat.py", line 13, in <module>
import charset_normalizer as chardet
File "work/charset_normalizer.zip/charset_normalizer/init.py", line 24, in <module>
from .api import from_bytes, from_fp, from_path, normalize
File "work/charset_normalizer.zip/charset_normalizer/api.py", line 35
sequences: bytes,
^
SyntaxError: invalid syntax
我的udf函数前面加了# coding:utf-8 ,是不是就意味着这是udf python2?
是的,当您在UDF函数的代码文件中添加了# coding:utf-8注释时,这意味着您的UDF函数是使用 Python 2 编写的。Python 2 和 Python 3 在语法和特性上存在一些差异,因此在使用 Python 2 编写的代码在 Python 3 环境中可能会出现语法错误。
根据您提供的错误信息,可以看到在 charset_normalizer 模块中出现了语法错误,这表明该模块可能不兼容 Python 2。在 Python 3 中,使用 : 来注解函数参数的类型是合法的,但在 Python 2 中则不被支持,因此会导致 SyntaxError: invalid syntax 错误。
要解决这个问题,您有以下几个选项:
迁移至 Python 3:将您的 UDF 函数代码迁移到 Python 3,并确保您的依赖库也兼容 Python 3。这样可以避免 Python 2 和 Python 3 之间的兼容性问题。
检查依赖库:检查您的代码中使用的依赖库是否兼容 Python 2,并确保使用与 Python 2 兼容的版本。如果某些依赖库不支持 Python 2,您可能需要考虑升级这些库或者寻找替代方案。
使用支持 Python 2 的 pyodps 版本:如果迁移到 Python 3 不可行,您可以尝试使用支持 Python 2 的旧版本 pyodps。您可以查看 pyodps 的文档或官方仓库来获取适用于 Python 2 的版本。
用python3的版本的,python2官方都已经停止维护了吧。https://help.aliyun.com/zh/maxcompute/user-guide/python-3-udfs?spm=a2c4g.11186623.0.0.67386adas0Sqph可以再参考参考示例
https://help.aliyun.com/zh/maxcompute/user-guide/python-3-udfs?spm=a2c4g.11186623.0.0.67386adas0Sqph#b90a973019kwa,此回答整理自钉群“MaxCompute开发者社区2群”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。