gpt4 book ai didi

hadoop - 如何从Yahoo PigLatin UDF内将文件加载到DataBag中?

转载 作者:行者123 更新时间:2023-12-02 20:14:38 26 4
gpt4 key购买 nike

我有一个Pig程序,试图计算两个袋子之间的最小中心。为了使它起作用,我发现我需要将袋子打包成单个数据集。整个操作需要很长时间。我想从UDF内的磁盘中打开一个袋子,或者能够将另一个关系传递到UDF中而无需COGROUP ...

码:

# **** Load files for iteration ****
register myudfs.jar;
wordcounts = LOAD 'input/wordcounts.txt' USING PigStorage('\t') AS (PatentNumber:chararray, word:chararray, frequency:double);
centerassignments = load 'input/centerassignments/part-*' USING PigStorage('\t') AS (PatentNumber: chararray, oldCenter: chararray, newCenter: chararray);
kcenters = LOAD 'input/kcenters/part-*' USING PigStorage('\t') AS (CenterID:chararray, word:chararray, frequency:double);
kcentersa1 = CROSS centerassignments, kcenters;
kcentersa = FOREACH kcentersa1 GENERATE centerassignments::PatentNumber as PatentNumber, kcenters::CenterID as CenterID, kcenters::word as word, kcenters::frequency as frequency;

#***** Assign to nearest k-mean *******
assignpre1 = COGROUP wordcounts by PatentNumber, kcentersa by PatentNumber;
assignwork2 = FOREACH assignpre1 GENERATE group as PatentNumber, myudfs.kmeans(wordcounts, kcentersa) as CenterID;

基本上我的问题是,对于每个专利,我都需要传递子关系(字数统计,kcenters)。为了做到这一点,我进行了一个十字运算,然后进行了PatentNumber的COGROUP运算,以获取集合PatentNumber,{wordcounts},{kcenters}。如果我能找到一种通过UDF内部传递关系或打开中心的方法,那么我可以按PatentNumber分组GROUP wordcounts并运行myudfs.kmeans(wordcount),希望在没有CROSS / COGROUP的情况下更快。

这是一个昂贵的操作。目前,这大约需要20分钟,并且似乎需要处理CPU / RAM。我当时认为没有CROSS可能会更有效率。我不确定会不会更快,所以我想尝试一下。

无论如何,似乎从Pig中调用Loading函数需要一个PigContext对象,而我不能从evalfunc中获得它。要使用hadoop文件系统,我还需要一些初始对象,但我不知道该如何获得。所以我的问题是如何从PIG UDF中的hadoop文件系统中打开文件?我还通过main运行UDF进行调试。因此,在 Debug模式下,我需要从普通文件系统加载。

另一个更好的主意是,如果有一种无需将CROSS / COGROUP传递给UDF的方法。这将是理想的,特别是如果该关系驻留在内存中..即能够执行myudfs.kmeans(wordcounts,kcenters)而不需要使用带有kcenters的CROSS / COGROUP ...

但基本思想是将IO换为RAM / CPU周期。

无论如何,任何帮助将不胜感激,除了最简单的PIG UDF,甚至没有UDF手册,也没有很好的文档记录。

最佳答案

切尔沃
存钱 jar 中有一个UDF,它或多或少地执行您想要的操作,称为LookupInFiles。查看源代码,可以很轻松地转换为您的需求。

http://svn.apache.org/viewvc/hadoop/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/string/LookupInFiles.java

如果您还有其他问题,文档建议等,请通过电子邮件发送列表。

关于hadoop - 如何从Yahoo PigLatin UDF内将文件加载到DataBag中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2721902/

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