0

我正在尝试在 Java 中构建我的第一个 Pig UDF,并且在使用 Eclipse 构建时无法调用该函数(我的类路径中有 pig 0.10.0 jar 文件)。源文件在,类文件由Eclipse/com/foo/bar/pig/IsInternal.java放入。/bin/com/foo/bar/pig/IsInternal.class

我的代码如下所示:

package com.foo.bar.pig;

// ... imports ...

public class IsInternal extends FilterFunc {
    public Boolean exec(Tuple input) throws IOException {
        // ... code here ...
        return true; // or false
    }
}

编译后,我jar -cf PiggyBank.jar BiggyBank从项目目录外运行,将其全部打包到 JAR 中。当我运行 Pig 时,我在 grunt shell 中尝试以下操作:

REGISTER /full/path/to/PiggyBank.jar
DEFINE isInternal com.foo.bar.pig.IsInternal();

A = LOAD '/some/file/in/hdfs' USING PigStorage();
B = FILTER A BY isInternal($1);

那时我收到以下错误:

ERROR 1070: Could not resolve com.foo.bar.pig.IsInternal using imports: [, org.apache.pig.builtin, org.apache.pig.impl.builtin.]

Java 代码本身很好(我已经对其进行了测试),并且我尝试在 DEFINE 中使用不同的类路径,但没有任何运气。我在网上没有找到任何帮助。我将如何解决这个问题?

4

2 回答 2

1

我对手工包装成 .jar 感到有些不安。您可以尝试放入 Eclipse 项目并从那里导出吗?

另外,你能确认一下jar的目录结构吗?它应该是这样的:PiggyBank.jar/com/foo/bar/pig/IsInternal.class

于 2012-06-07T22:13:04.120 回答
0

这个错误看起来像你没有修复你的 UDF 的类路径路径错误我也有同样的问题你在这个链接中我解释了如何修复上述错误。希望它会帮助你。

于 2013-09-24T05:46:11.050 回答