PIG UDF导入解析
PIG UDF import resolve
UDF 的新手。借用了另一个 post 作为模板,但我认为不是同一个原因
ERROR 1070: Could not resolve myudfs.UPPER using imports: [, org.apache.pig.builtin., org.apache.pig.impl.builtin.]
脚本
register /home/tad/pig/myudf.jar;
quantiles = LOAD '/user/tad/quantiles' using PigStorage('\t','-schema');
--just one line of data
a = foreach quantiles generate 'a';
b = foreach a generate myudfs.UPPER([=10=]);
函数
package myudfs;
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 || input.get(0) == null)
return null;
try{
String str = (String)input.get(0);
return str.toUpperCase();
}catch(Exception e){
throw new IOException("Caught exception processing input row ", e);
}
}
}
注册的时候没有报错,说明pig找到jar文件没问题
运行 来自 Grunt
jar 的结构
META-INF
myudf
+--UPPER.java
+--IndexOfBig.java
+--IndexOfBig.class
+--pig.jar
+--UPPER.class
您的 jar 结构中没有包,您可以添加它或从脚本中删除它。
1-添加包结构(这里不需要pig.jar
):
myudfs
+-- UPPER.java
+-- IndexOfBig.java
+-- IndexOfBig.class
+-- UPPER.class
2- 或者从代码和脚本中删除它并保持 jar 原样:
脚本
b = foreach a generate UPPER([=11=]);
函数
//package myudfs; // remove this line
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
public class UPPER extends EvalFunc<String>
{
..
如果 jar 在本地文件系统中:
register /localpath/tad/pig/myudf.jar;
如果它在 hdfs 中:
register hdfs://namenode:port/tad/pig/myudf.jar;
最后,根据您的构建工具,清单属性可能未设置为像 pig udf 一样正常工作,要摆脱它,请使用使用此命令的命令行:
jar cf myjar IndexOfBig.class UPPER.class
UDF 的新手。借用了另一个 post 作为模板,但我认为不是同一个原因
ERROR 1070: Could not resolve myudfs.UPPER using imports: [, org.apache.pig.builtin., org.apache.pig.impl.builtin.]
脚本
register /home/tad/pig/myudf.jar;
quantiles = LOAD '/user/tad/quantiles' using PigStorage('\t','-schema');
--just one line of data
a = foreach quantiles generate 'a';
b = foreach a generate myudfs.UPPER([=10=]);
函数
package myudfs;
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 || input.get(0) == null)
return null;
try{
String str = (String)input.get(0);
return str.toUpperCase();
}catch(Exception e){
throw new IOException("Caught exception processing input row ", e);
}
}
}
注册的时候没有报错,说明pig找到jar文件没问题
运行 来自 Grunt
jar 的结构
META-INF
myudf
+--UPPER.java
+--IndexOfBig.java
+--IndexOfBig.class
+--pig.jar
+--UPPER.class
您的 jar 结构中没有包,您可以添加它或从脚本中删除它。
1-添加包结构(这里不需要pig.jar
):
myudfs
+-- UPPER.java
+-- IndexOfBig.java
+-- IndexOfBig.class
+-- UPPER.class
2- 或者从代码和脚本中删除它并保持 jar 原样:
脚本
b = foreach a generate UPPER([=11=]);
函数
//package myudfs; // remove this line
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
public class UPPER extends EvalFunc<String>
{
..
如果 jar 在本地文件系统中:
register /localpath/tad/pig/myudf.jar;
如果它在 hdfs 中:
register hdfs://namenode:port/tad/pig/myudf.jar;
最后,根据您的构建工具,清单属性可能未设置为像 pig udf 一样正常工作,要摆脱它,请使用使用此命令的命令行:
jar cf myjar IndexOfBig.class UPPER.class