在使用MaxCompute Studio开发工具之前,需要首先完成IDEA中MaxCompute Studio开发环境的搭建,具体见:MaxCompute基础开发环境搭建 。MaxCompute Studio上Java程序开发流程如下:
下面根据以上步骤进行Java UDF的开发内容。
在完成MaxCompute Studio的开发环境(构建了max-compute-learning项目)之后,需要创建MaxCompute Java Module来开发Java UDF,具体步骤如下:
1. 在创建的max-compute-learning项目中,创建Java Moudle:
在打开的创建选项中,选择MaxCompute Java选项:
Additional Libraries中可以不选择其他的libraries,保持默认即可,然后输入需要创建的Module Name,完成module的创建。
2. 完成MaxCompute Java Module创建后,MaxCompute Studio会自动创建一个Maven Module。Maven Module的目录包括:
其中,MaxCompute Studio中本地warehouse目录存储MaxCompute项目下的表(包括meta和数据)和资源,用于本地执行UDF或MapReduce。
3. 此外,Moudle的pom.xml文件中会自动加入odps-sdk-udf的相关依赖:
完成以上Java Module的创建后,开始Java UDF的开发过程。
1. 创建MaxCompute Java UDF:
在出现的创建文件的窗口中,选择文件类型为UDF:
2. 创建完成后,编辑UDF代码:
public class LowerUDF extends UDF {
// TODO define parameters and return type, e.g: public String evaluate(String a, String b)
public String evaluate(String s) {
if (s == null) {
return null;
}
return s.toLowerCase();
}
}
为了在将UDF上传之前查看UDF运行是否符合预期。需要对UDF进行测试,包含两种方法:单元测试和本地运行两种方式。
以上的运行配置项,就是使用local本地的方式,使用wc_in1表中的col1列的数据,进行UDF的测试,wc_in1的表数据和运行结果如下:
-- 可以在warehouse/__tables__目录下查看wc_in1表的data数据
A1,A2,A3,A4
A1,A2,A3,A4
A1,A2,A3,A4
A1,A2,A3,A4
-- udf运行返回结果如下
a1
a1
a1
a1
修改上面的运行配置参数,如下:
这里MaxCompute Project选择Studio中配置好的远程工作空间,并选择其中的emp表,使用该表的ename数据来进行本地UDF的测试。其中emp表的数据如下:
运行后返回的结果如下:
smith
allen
ward
jones
martin
blake
clark
scott
king
turner
adams
james
ford
miller
说明:
- 本地运行会读取warehouse中指定的表数据作为输入,您可以在控制台查看日志输出。
- 如果指定的MaxCompute项目的表数据未被下载至warehouse目录中,会先下载数据;如果数据已经下载,则跳过此步骤。
参考examples目录下的单元测试实例,编写自己的测试用例:
UDF、MapReduce和Graph等Java程序发布到服务端供生产使用前,要经历打包、上传和注册三个步骤。MaxCompute Studio提供了一键发布功能(即在MaxCompute Studio上依次执行mvn clean package,上传jar和注册三个步骤)。
1. 右键单击已经编译成功的Java代码,选择Deploy to server…。
2. 在Package a jar and submit resource对话框中,配置相关参数。
点击ok之后,MaxCompute会执行maven clean package命令来进行项目的打包,并会自动将指定的resource name的jar文件上传到MaxCompute服务器中。
执行完成上面的deploy to server过程后,可以在MaxCompute Studio左侧Project Explorer区域的Resources节点下可以看到这里上传的资源:
如果没有自动上传,则可以根据如下步骤来进行手动的资源上传:
打包并上传完成后,只是在resource中添加了包含了我们定义的UDF文件,在Functions中还没有创建对应的UDF。因此需要根据上传的资源文件来注册我们需要使用的UDF。
在显示的窗口中进行设置:
点击确定即根据上传的resource创建名为lower_udf的UDF。此时可以在Functions选项中进行查看创建完成的UDF:
完成上面的操作后,可以使用刚才创建的名为lower_udf的function来使用上传的UDF。在MaxCompute SQL Script中运行如下命令:
select lower_udf('ABC');
运行成功后,得到的输出结果如下:
_c0
+----+
abc