cranberries8 发表于 2015-12-14 20:34 非常感谢,完美的解决了我的问题。对于==和equals的区别我了解的还不是很透彻(接触hadoop后才看了的ava)。如果可以大神可以指点一二,让我多一些参考。 |
本帖最后由 cranberries8 于 2015-12-14 20:35 编辑 看了下你的程序逻辑: 就是在args[] 中 args 和 args[0]相同就输出相同的下一位数args[i+1] ,如果灭有出现和args[0]相同的就返回最后一位数字。 在hive中你输入的 args[4]={"a","a","b","c"},按逻辑来讲期望的输出是"b",但是运行的结果是"c" 也就是返回值是第一次i=0时赋值的。也就是在你的逻辑部分args[1],args[2],args[3] 都没有满足条件(i % 2 == 0 && i != 0 && org_val == args[i - 1].toString()); b的索引为2 (这是数字)一定满足前两个条件 也就是说没能满足第三个条件 org_val == args[i - 1].toString() 问题就是java 的== 是判断是不是同一个实例的(可能hive 对上述的参数重新生成了新对象也就是说 args[0] 和args[1]虽然值相同但是不是同一对象) 所以你可以试试将org_val == args[i - 1].toString() 改为 org_val.equal(args[i - 1].toString()) |
@各位大神 |
arsenduan 发表于 2015-12-9 19:53 我觉得不是输入参数个数或者参数值的问题。 [mw_shl_code=java,true]package com.danny; import com.danny.UDFDecode; //import com.danny.Args_check; public class test_udf { public static void main(String[] args) { UDFDecode de=new UDFDecode(); System.out.println(de.evaluate("a","a","b","c")); } } [/mw_shl_code] 输出结果: b |
我觉得不是输入参数个数或者参数值的问题。 [mw_shl_code=java,true]package com.danny; import com.danny.UDFDecode; //import com.danny.Args_check; public class test_udf { public static void main(String[] args) { UDFDecode de=new UDFDecode(); System.out.println(de.evaluate("a","a","b","c")); } } [/mw_shl_code] 输出结果: b |
输入数据不一样,输出结果也会不一样。 两个输入数据保持一致,在测试看看 |