在大数据计算MaxCompute写udf函数,没起作用,单独执行脚本是成功的,怎么解决?
from odps.udf import annotate
@annotate('string->string')
class convert_latin_to_english(object):
def init(self):
self.mapping = {
'à': 'a', 'á': 'a',
'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', 'è': 'e',
'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i',
'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', 'ö': 'o',
'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', 'ý': 'y', 'þ': 'th',
'ß': 'ss', 'ā': 'a', 'ă': 'a', 'ą': 'a', 'ć': 'c', 'ĉ': 'c', 'ċ': 'c',
'č': 'c', 'ď': 'd', 'đ': 'd', 'ē': 'e', 'ĕ': 'e', 'ė': 'e', 'ę': 'e',
'ě': 'e', 'ĝ': 'g', 'ğ': 'g', 'ġ': 'g', 'ģ': 'g', 'ĥ': 'h', 'ħ': 'h',
'ĩ': 'i', 'ī': 'i', 'ĭ': 'i', 'į': 'i', 'ı': 'i', 'ij': 'ij', 'ĵ': 'j',
'ķ': 'k', 'ĸ': 'k', 'ĺ': 'l', 'ļ': 'l', 'ľ': 'l', 'ŀ': 'l', 'ł': 'l',
'ń': 'n', 'ņ': 'n', 'ň': 'n', 'ʼn': 'n', 'ŋ': 'n', 'ō': 'o', 'ŏ': 'o',
'ő': 'o', 'œ': 'oe', 'ŕ': 'r', 'ŗ': 'r', 'ř': 'r', 'ś': 's', 'ŝ': 's',
'ş': 's', 'š': 's', 'ţ': 't', 'ť': 't', 'ŧ': 't', 'ũ': 'u', 'ū': 'u',
'ŭ': 'u', 'ů': 'u', 'ű': 'u', 'ų': 'u', 'ŵ': 'w', 'ŷ': 'y', 'ź': 'z',
'ż': 'z', 'ž': 'z', 'ſ': 's', 'ƀ': 'b', 'ƃ': 'b', 'ƅ': 'b', 'ƈ': 'c',
'ƌ': 'd', 'ƍ': 'd', 'ƒ': 'f', 'ƕ': 'hv', 'ƙ': 'k', 'ƚ': 'l', 'ƛ': 'l',
'ƞ': 'n', 'ơ': 'o', 'ƣ': 'oi', 'ƥ': 'p', 'ƨ': 's', 'ƪ': 's', 'ƫ': 't',
'ƭ': 't', 'ư': 'u', 'ƴ': 'y', 'ƶ': 'z', 'ƹ': 'z', 'ƺ': 'z', 'ƽ': 'z',
'ƾ': 'z', 'ƿ': 'w', 'dž': 'dz', 'lj': 'lj', 'nj': 'nj', 'ǎ': 'a', 'ǐ': 'i',
'ǒ': 'o', 'ǔ': 'u', 'ǖ': 'u', 'ǘ': 'u', 'ǚ': 'u', 'ǜ': 'u', 'ǝ': 'e',
'ǟ': 'a', 'ǡ': 'a', 'ǣ': 'ae', 'ǥ': 'g', 'ǧ': 'g', 'ǩ': 'k', 'ǫ': 'o',
'ǭ': 'o', 'ǯ': 'z', 'dz': 'dz', 'ǵ': 'g', 'ǹ': 'n', 'ǻ': 'a', 'ǽ': 'ae',
'ǿ': 'o', 'ȁ': 'a', 'ȃ': 'a', 'ȅ': 'e', 'ȇ': 'e', 'ȉ': 'i', 'ȋ': 'i',
'ȍ': 'o', 'ȏ': 'o', 'ȑ': 'r', 'ȓ': 'r', 'ȕ': 'u', 'ȗ': 'u', 'ș': 's',
'ț': 't', 'ȝ': 'g', 'ȟ': 'h', 'ȣ': 'ou', 'ȥ': 'z', 'ȧ': 'a', 'ȩ': 'e',
'ȫ': 'o', 'ȭ': 'o', 'ȯ': 'o', 'ȱ': 'o', 'ȳ': 'y', 'ȼ': 'c', 'ȿ': 's',
'ɀ': 'z', 'ɂ': 'z', 'ɇ': 'e', 'ɉ': 'j', 'ɋ': 'q', 'ɍ': 'r', 'ɏ': 'y'
# 添加更多的映射关系
}
def evaluate(self, s):
# 如果输入的字符串为空,直接返回空字符串
if not s or s =='' or not isinstance(s, str):
return None
result = ''
for char in s.lower():
if char in self.mapping:
result += self.mapping[char]
else:
result += char
return result
执行结果
默认用的python2的环境,如果是python3的话需要加参数开启一下:https://help.aliyun.com/zh/maxcompute/user-guide/python-3-udfs?spm=a2c4g.11186623.0.i35#section-36f-71l-0wf
此回答整理自钉群“MaxCompute开发者社区2群”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。