回4楼果子果子的帖子
您好,根据提示错误应该发生在TestReducer.java的第42行,可否麻烦您把42行左右那块区域的代码截图下来看看。
-------------------------
回4楼果子果子的帖子
您好,我刚刚又重新做了一遍,在我这里是成功的。
根据您反映的情况,TestReducer.java第40+行大概都是在做output.set()的部分,并且这里错误提示是"index out of bound",即下标越界。我的推测是,您事先可能没有正确建立output table。
您可以再检查下“打包、上传、建表、运行“这个部分,由于reduce中的output将会有8列,因此对应的output table也应该要有8列。例子中是在SQL中建了如下的表,供您参考,您可以再尝试一下。
create table tb_output (user_id string, brand_id string, visit_datetime string, clicks bigint,
buy bigint, collect bigint, basket bigint, cum_clicks bigint);
请注意上面的命令是在SQL下执行的噢。
-------------------------
Re超级啰嗦版ODPSMapReduce入门
你的Reducer没有写错,你的output table也是正确的。并且根据错误提示,错误是发生在
output.set(2,date)这行,出现下标越界的问题。
output实际上是一个array,在reducer的setup函数里,output=context.createOutputRecord();这句会设定output的长度。
而你在之前执行output.set(0,...)与output.set(1,...)这两句均没有发生问题,说明
output被设定为长度为2了。
但是你的output table有8列,是正确的,所以我怀疑是程序没有读到正确的那个table。请你检查这两个地方。
第一个是在TestDriver中,
Input和Output table的名字,是否是由args[0]和args[1]这两个参数决定。
第二个是你在ODPS中调用的那句命令是否存在问题,重试下"打包、上传、建表、运行"这4个步骤
由于与虚拟机之间无法复制粘贴,虽然检查再检查,可能发生我博文中的代码与我实际执行代码不一致的情况,所以我把虚拟机中的代码全部截图下来给您参考。
TestDriver.java
TestMapper.java
TestReducer.java
-------------------------
回9楼果子果子的帖子
哈哈,成功了就好