pig:如何将关系作为参数传递给JavaUDF?

mwkjh3gx  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(366)

我的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       ")

我的自定义项是:

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

我可以把这个upcdata传递给我的udf吗?如果可以,我将如何把这个传递到hashmap中,其中upc是键,description是值。这算是数组列表还是元组?提前谢谢!
现在的问题是将这些数据传递到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\u scalar会产生正确的结果
我这样做的原因是将配置单元表的数据加载到解析文件的加载程序函数中。我需要将文件中的数据与配置单元表数据进行比较,以便进行更改并插入到新表中。
我的加载器函数以以下内容开始:

public class TheLoader extends LoadFunc {

    public TheLoader (DataBag item_master_stream) throws SQLException {
mcvgt66p

mcvgt66p1#

在你的例子中 UPCDATA 是一种关系。为了将其作为参数传递到函数中,必须将其转换为标量。您可以通过以下方式完成此任务:

UPCDATA_SCALAR = GROUP UPCDATA ALL;

在java中,这将作为 DataBagTuple s。你可以在这里了解更多。
值得记住的是 GROUP ALL 是非常昂贵的,所以你会想项目出所有的列,而不是你的自定义项功能的关键。

相关问题