我的猪脚本需要将数据传递给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,如果是这样,我如何将其转换为散列图,其中upc是键,而description是值。这被认为是一个arraylist或元组?提前谢谢!
现在问题是将这些数据传递给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会产生正确的结果
我这样做的原因是将hive表的数据加载到 解析文件的加载程序功能。我需要比较数据 文件到Hive表数据以进行更改和插入 一张新桌子。
我的加载器功能以:
开头public class TheLoader extends LoadFunc {
public TheLoader (DataBag item_master_stream) throws SQLException {
答案 0 :(得分:1)
在您的示例中UPCDATA
是一种关系。为了将它作为参数传递给函数,您将不得不convert it into a scalar.您可以通过以下方式实现此目的:
UPCDATA_SCALAR = GROUP UPCDATA ALL;
在Java中,这将作为DataBag
的{{1}}重新进行。您可以阅读有关here.
值得记住的是,执行Tuple
非常昂贵,因此您需要预测出对UDF功能不重要的所有列。