gpt4 book ai didi

java - PIG UDF导入解析

转载 作者:行者123 更新时间:2023-11-30 10:42:09 26 4
gpt4 key购买 nike

UDF 的新手。借用了另一篇文章作为模板,但我认为原因不同错误 1070:无法使用导入解析 myudfs.UPPER:[, 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($0);

函数

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($0);

函数

//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;

最后,根据你的构建工具,manifest 属性可能没有设置为像 pig udf 一样正常工作,为了摆脱它,很容易将你的 class 文件打包到一个 jar 文件中带有此命令的命令行:

jar cf myjar IndexOfBig.class UPPER.class

关于java - PIG UDF导入解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38235473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com