我在尝试使用pig从grunt调用java函数时,已经束手无策了。我对hadoop相当陌生,我已经好几年没有使用linux或java了(我是一个.net女孩)。我已经从piggybank.jar获得了一些函数来工作,这是提供的。我在eclipse中编写了一个简单的测试类,并将jar文件导出到我的根文件夹中供grunt使用。我按以下顺序运行这些命令并得到下面的错误。
grunt> Register KellyProject1.jar
grunt> grades = load 'grades.txt' as (studentName:charArray, <etc> );
grunt> grades2 = foreach grades generate studentName, hadoop.Upper(studentName);
error org.apache.pig.tools.grunt.grunt-错误1070:无法使用导入解析hadoop.upper:[,java.lang.,org.apache.pig.builtin.,org.apache.pig.impl.builtin.]
上.java:
package hadoop;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
public class Upper extends EvalFunc<String>
{
public String exec(Tuple input) throws IOException {
if (input == null || input.size() == 0)
return null;
try{
//String str = (String)input.get(0);
String str = "something";
return str.toUpperCase();
}catch(Exception e){
throw new IOException("Caught exception processing input row ", e);
}
}
}
起初我在一个普通类中编写了一个简单的“helloworld”静态方法,然后我在网上看到了所有这些扩展evalfunc的示例,所以我把java代码复制了下来。还想知道我是否只是不明白如何正确地生成/导出jar文件?eclipse设置为自动构建,所以我只需右键单击项目名称并转到export,然后让它将jar文件放在我的cloudera文件夹中。很难让我的大脑远离visualstudio和dll。
2条答案
按热度按时间5us2dqdw1#
你不需要在pig中使用hadoop这个词,因为它通常会在这个词上出现错误。当然,注册jar是正确的一步,但更重要的一步是告诉pig类的完全限定名,您将其用作udf(本例中的java函数)。有两种情况
案例1:定义自己的自定义项时就是这样。
只需确保您正在注册的jar必须包含您在fullyqualified name中使用的类
案例2:当您尝试在hadoop包中使用已经存在的pig udf时就是这种情况。
第二种情况是您尝试使用hadoop包中提供的内置pig函数。
因此,对于内置的pig函数,我们不需要使用完全限定名。
fgw7neuy2#
在windows平台上运行时。只需在管理模式下打开cmd提示符。!!确保您的用户名不包含任何空格。。