使用UDF在Pig中解析XML文件

时间:2016-05-17 15:28:42

标签: regex xml apache-pig

我想使用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。是否有任何可用于解析XML的UDF,或者如何创建UDF以实现我的目的。我使用的是Pig版本0.12,XPath在这个版本中不起作用。

提前致谢

1 个答案:

答案 0 :(得分:0)

如果您正在使用正则表达式,shouldn't,您可能也不太担心速度,所以只使用lazy dotall(.*)量词:

 <book.*?id="(.*?)".*?<author>(.*?)<\/author>.*?<title>(.*?)<\/title>

demo