【问题标题】:I want to extract specific information from XML input using Hadoop Pig Latin我想使用 Hadoop Pig Latin 从 XML 输入中提取特定信息
【发布时间】:2015-12-25 18:03:04
【问题描述】:

预期输出为:(Hadoop definitive guide,Tom white,24.90)

我尝试过使用Regex_Extract() 函数。但是,还没有运气。有人可以帮帮我吗?

我的脚本的输入是:

<CATALOG>
<BOOK>
<TITLE>Hadoop DEFINITIVE GUIDE</TITLE>
<AUTHOR>TOM WHITE</AUTHOR>
<COUNTRY>US</COUNTRY>
<COMPANY>CLOUDERA</COMPANY>
<PRICE>24.90</PRICE>
<YEAR>2012</YEAR>
</BOOK>
<BOOK>
<TITLE>Programming Pig</TITLE>
<AUTHOR>Alan Gates</AUTHOR>
<COUNTRY>USA</COUNTRY>
<COMPANY>Horton Works</COMPANY>
<PRICE>30.90</PRICE>
<YEAR>2013</YEAR>
</BOOK>
</CATALOG>

【问题讨论】:

  • 你的 Pig 版本是什么?我猜 Rank 可以从 Pig 0.9 获得。剧本,我写的很完美。

标签: hadoop apache-pig


【解决方案1】:

您必须分别提取&lt;TITLE&gt;&lt;AUTHOR&gt;&lt;PRICE&gt;,然后使用JOIN 运算符将它们连接在一起。

以下脚本实现:

-- Load input 
A = LOAD '/input.txt' USING PigStorage() AS (f1:chararray);

-- Extract <TITLE>
B1 = FOREACH A GENERATE REGEX_EXTRACT(f1, '<TITLE>(.*)</TITLE>', 1) AS (title:chararray);
C1 = FILTER B1 BY title is not null;
D1 = RANK C1;

-- Extract <AUTHOR>
B2 = FOREACH A GENERATE REGEX_EXTRACT(f1, '<AUTHOR>(.*)</AUTHOR>', 1) AS (author:chararray);
C2 = FILTER B2 BY author is not null;
D2 = RANK C2;

-- Extract <PRICE>
B3 = FOREACH A GENERATE REGEX_EXTRACT(f1, '<PRICE>(.*)</PRICE>', 1) AS (price:chararray);
C3 = FILTER B3 BY price is not null;
D3 = RANK C3;

-- Join 3 data sets
D = JOIN D1 BY $0, D2 BY $0, D3 By $0;

-- Eliminate the ranks
E = FOREACH D GENERATE $1 AS (title:chrarray), $3 AS (author:chararray), $5 AS (price:chararray)

dump E;

对于问题中提到的输入,我得到以下输出:

(Hadoop DEFINITIVE GUIDE,TOM WHITE,24.90)
(Programming Pig,Alan Gates,30.90)

【讨论】:

  • 好的,我能够提取单个数据,但我无法加入 3 个数据集..出现解析错误。错误 org.apache.pig.tools.grunt.Grunt-Erroe 10000:解析时出错。在第 1 行遇到“”..也无法执行 Rank cmd..仍然稍微修改上述命令我能够提取 dem...无法加入 dem..我做错了什么..请帮助...
  • B = foreach A GENERATE FLATTEN(REGEX_EXTRACT(x,'(.*)',1)) AS (title:chararray);我提取了个人数据..
  • 您使用的是哪个版本的 Pig?我的 Pig 版本是 0.14。这个脚本非常适合我。我什至发布了通过在我的设置中运行脚本得到的答案。你能查一下pig --version吗?可能您的 Pig 版本不支持Rank。从 Pig 0.11 开始支持Rank 函数。
  • 我收到 RANK 命令的标识符错误..E​​NCOUNTERED C1,期待 "as",";"...我们有任何替代命令来代替 RANK...coz m den 收到最后一个命令的错误..
  • 我问你,你的 Pig 版本是什么?你能告诉我吗?
猜你喜欢
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 2013-07-02
相关资源
最近更新 更多