使用 UDF 在 Pig 中解析 XML 文件
Posted
技术标签:
【中文标题】使用 UDF 在 Pig 中解析 XML 文件【英文标题】:Parse XML file in Pig using UDF 【发布时间】:2016-05-17 15:28:41 【问题描述】:我想使用 Pig 解析 XML 文件。请在下面找到 XML
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>
<amount>25</amount>
<tax>12</tax>
<total>37</total>
</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with XML</description>
</book>
</catalog>
我目前正在使用 XMLLoader 加载 XML 文件并使用正则表达式来解析 XML
代码:
REGISTER piggybank.jar
A=LOAD '/users/books.xml' using org.apache.pig.piggybank.storage.XMLLoader
('book') as (x:chararray);
B=FOREACH A GENERATE(REGEX_EXTRACT_ALL(x,'<book.*?id="([^>]*?">.*?<author>([^>]*?)</author>.*?</book>'));
dump B;
我想了解是否有任何其他方法来解析 XML - 可能是使用 UDF。是否有任何 UDF 可用于解析 XML,或者我如何创建 UDF 来服务于我的目的。我使用的是 Pig 0.12 版,而 XPath 在此版本中不起作用。
提前致谢
【问题讨论】:
【参考方案1】:如果您使用的是正则表达式,即shouldn't,您可能也不太担心速度,所以只需使用惰性 dotall (.*
) 量词:
<book.*?id="(.*?)".*?<author>(.*?)<\/author>.*?<title>(.*?)<\/title>
demo
【讨论】:
以上是关于使用 UDF 在 Pig 中解析 XML 文件的主要内容,如果未能解决你的问题,请参考以下文章