gpt4 book ai didi

hadoop - 在 Apache Pig 中运行 UDF

转载 作者:可可西里 更新时间:2023-11-01 16:58:22 26 4
gpt4 key购买 nike

我在尝试使用 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);

错误 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);
}
}
}

起初我在常规类中编写了一个简单的“hello world”静态方法,然后我在网上看到了所有这些扩展 EvalFunc 的示例,所以我复制了该 java 代码。还想知道我是否只是不明白如何正确生成/导出 jar 文件? Eclipse 设置为自动构建,所以我只需右键单击项目名称并转到导出并将 jar 文件放入我的 Cloudera 文件夹中。很难让我的大脑远离 Visual Studio 和 dll。

最佳答案

你不需要在 pig 中使用“hadoop”这个词,因为它通常会在这个词上抛出错误。当然注册 jar 是正确的一步,但更重要的一步是告诉 pig 你正在使用的类的完全限定名称作为 UDF(在你的情况下是 Java 函数)。有两种情况

Case1: This is the case when you define your own UDF.

grunt> Register KellyProject1.jar
grunt> DEFINE YourUdfName FullyQualifiedname;
grunt> grades = load 'grades.txt' as (studentName:charArray, <etc> );
grunt> grades2 = foreach grades generate studentName, YourUdfName(studentName);

只需确保您注册的 Jar 必须包含您使用的 FullyQualified 名称中的类

Case2: This is the case when you try to use already existing PIG UDFs in hadoop package.

grunt> grades2 = foreach grades generate studentName,UPPER(studentName);

第二种情况是您尝试使用 hadoop 包中提供的内置 pig 函数的情况。

因此对于内置 PIG 函数,我们不需要使用完全限定名称。

关于hadoop - 在 Apache Pig 中运行 UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27157709/

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