java - pig : How to pass relationship to Java UDF as argument?

标签 java apache-pig user-defined-functions

我的pig脚本需要将数据传递给java构造函数:

UPCFIND = LOAD 'testdatabase.item' USING org.apache.hive.hcatalog.pig.HCatLoader() AS (upc:chararray,description:chararray); 
UPCDATA = FOREACH UPCFIND GENERATE upc,description;
DUMP UPCDATA;
//output:
(00001123456789," Table       ")
(00000123456789," PICTURE       ")

我的 UDF 是:

loading = LOAD '/incoming/files/*' USING com.readingitems.loading.TheLoader(UPCDATA) as
 (upc:chararray, description:chararray,

我可以将此UPCDATA传递给我的UDF吗?如果可以,我如何将其放入 HashMap 中,其中up​​c是键,描述是值。这被认为是数组列表还是元组?提前致谢!

现在的问题是将这些数据传递给 java 构造函数:

UPCFIND = LOAD 'testdatabase.item' USING org.apache.hive.hcatalog.pig.HCatLoader() AS (upc:chararray,description:chararray);
UPCDATA = FOREACH UPCFIND GENERATE upc,description;
UPCDATA_SCALAR = GROUP UPCDATA ALL;

loading = LOAD 'files/incoming/*' USING com.readingitems.loading.TheLoader(UPCDATA_SCALAR)

收到错误:

ERROR org.apache.pig.Main - ERROR 2997: Encountered IOException. org.apache.pig.tools.parameters.ParameterSubstitutionException: Undefined parameter : UPCDATA_SCALAR

转储 UPCDATA_SCALAR 会产生正确的结果

The reason why I'm doing this is to load a hive table's data into a Loader function that's parsing files. I need to compare data in the files to the Hive table data in order to make changes and insert into a new table.

我的加载器函数开头为:

public class TheLoader extends LoadFunc {

    public TheLoader (DataBag item_master_stream) throws SQLException {

最佳答案

在您的示例中,UPCDATA 是一种关系。为了将它作为参数传递到函数中,您必须 convert it into a scalar.您可以通过以下方式完成此操作:

UPCDATA_SCALAR = GROUP UPCDATA ALL;

在 Java 中,这将表示为 TupleDataBag。您可以阅读更多相关信息 here.

值得记住的是,执行 GROUP ALL 的成本非常高,因此您需要投影出对 UDF 功能不重要的所有列。

关于java - pig : How to pass relationship to Java UDF as argument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35494243/

相关文章:

hadoop - 使用来自 grunt 的 exec 命令运行脚本

apache-pig - Pig功能中的StrSplit

Select 中的 SQL 用户定义函数

java - 使用 Hadoop,我可以在没有运行数据节点的机器上创建任务跟踪器吗?

引用 vararg (String[]...) 时,Javadoc @link 不起作用

java - 使用 Angularjs 从 Grails 后端获取 JSON 数据

java - 是否可以在一个 Java 类中运行 Java 应用程序和 Junit 测试?

hadoop - pig 注册jar,文件不存在报错

python - 在 JSON 中存储 Python 函数

python - 获取单元格的行和列,xlwings UDF在哪里被调用?