在 ODPS SQL 上使用自定义函数(UDF)

穿衣搭配算法比赛终于要用UDF了,赶紧配置一个。发现官网上的介绍已经跟不上ODPS发展的步伐了,如果之前不是对Maven还有点了解,感觉配置一个UDF都不容易。几个相关的官网链接:编写UDF移动推荐算法参赛攻略以及UDF/MR本地开发工具(比较详细)。

Alibaba ODPS 为 Eclipse 专门定制了插件,但事实上,ODPS UDF 是为 Maven 定制的,任何对Maven提供标准支持的IDE都可以正常用。我就比较习惯用IntelliJ,对Maven和Gradle支持都不错。

ODPS 为 UDF 和 MapReduce 项目都提供了项目模板支持(就是官网的archetype,这个步骤实际上是建立一个UDF或者MapReduce的模板),在IntelliJ IDEA下,实际上直接输入官网提供的参数即可:

IntelliJ IDEA 配置 Maven Archetype

其中,

GroupId: com.alibaba.base
ArtifactId: base-udf-archetype/base-mr-archetype
Version:  1.0.0-SNAPSHOT
Repository: http://maven.sdk.de.yushanfang.com/SNAPSHOT

然后,就可以根据生成的例子实现自己的UDF了(貌似就是继承 UDF 类,详情见文档)。

和官网有点不一样的地方是,IntelliJ IDEA 不会提示你编写自己的项目信息,需要编辑 main/resources/credential.propertiesmain/resources/META-INF/base.udf.xml 。另外需要注意的是 idePath 的文件夹需要预先存在(官网给出的『workflow』需要改为『工作流』,否则文件夹不存在……)。

根据官网提示,编辑 .m2/settings.xml 文件,一般在 $HOME 目录下。这个步骤是为了添加向 Maven 注册非官方插件(还不在 Maven 的官方仓库里)。

最后,正常运行 Maven Goal 即可(在Maven面板),并填写相关参数(这个参数每个人都一样),如图:

运行Maven目标