使用ApachePig处理xml文件

vnzz0bqm  于 2021-06-24  发布在  Pig
关注(0)|答案(3)|浏览(242)

我有这样的xml文件:

<CATALOG>
<CD>
<TITLE>hadoop developer</TITLE>
<ARTIST>ajay</ARTIST>
<COUNTRY>india</COUNTRY>
<COMPANY>ITC</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>2013</YEAR>
</CD>
</CATALOG>

我用了一些正则表达式,但我不知道为什么没有得到想要的输出。。。我的代码如下:

**寄存器/usr/lib/pig/piggybank.jar

A = load 'input.xml' using org.apache.pig.piggybank.storage.XMLLoader('CATALOG') as (x: chararray);
B = foreach A GENERATE FLATTEN(REGEX_EXTRACT_ALL(x,'<CATALOG>\n*<CD>\n<TITLE>(.*)</TITLE>\n*<ARTIST>(.*)</ARTIST>\n*<COUNTRY>(.*)</COUNTRY>\n*<COMPANY>(.*)</COMPANY>\n*<PRICE>(.*)</PRICE>\n*<YEAR>(.*)</YEAR>\n*</CD>\\n*</CATALOG>')) as (name:chararray, words:chararray);**

我的输出如下:

2013-08-20 12:40:24,043 [main] INFO
org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Success!

2013-08-20 12:40:24,044 [main] WARN
org.apache.pig.data.SchemaTupleBackend - SchemaTupleBackend has already been initialized

2013-08-20 12:40:24,047 [main] INFO
org.apache.hadoop.mapreduce.lib.input.FileInputFormat - Total input paths to process : 1

2013-08-20 12:40:24,047 [main] INFO
org.apache.pig.backend.hadoop.executionengine.util.MapRedUtil - Total input paths to process : 1

怎么了?谢谢您。

8qgya5xd

8qgya5xd1#

这个呢:

A = load 'input.xml' using org.apache.pig.piggybank.storage.XMLLoader('CD') 
    as (x:chararray);

B = foreach A GENERATE FLATTEN(REGEX_EXTRACT_ALL(x, 
      '<CD>\\n\\s*<TITLE>(.*)</TITLE>\\n\\s*<ARTIST>(.*)</ARTIST>\\n\\s*<COUNTRY>(.*)</COUNTRY>\\n\\s*<COMPANY>(.*)</COMPANY>\\n\\s*<PRICE>(.*)</PRICE>\\n\\s*<YEAR>(.*)</YEAR>\\n\\s*</CD>')) 
    as (title:chararray, artist:chararray, country:chararray, company:chararray, price:double, year:int);
5hcedyr0

5hcedyr02#

这应该管用。

A =  LOAD 'xml-files/cd.xml' using org.apache.pig.piggybank.storage.XMLLoader('CD') as (x:chararray);

B = foreach A GENERATE FLATTEN(REGEX_EXTRACT_ALL(x,'<CD>\\s*<TITLE>(.*)</TITLE>\\s*<ARTIST>(.*)</ARTIST>\\s*<COUNTRY>(.*)</COUNTRY>\\s*<COMPANY>(.*)</COMPANY>\\s*<PRICE>(.*)</PRICE>\\s*<YEAR>(.*)</YEAR>\\s*</CD>'));
eblbsuwk

eblbsuwk3#

试试看,这是测试和正确的工作;
在中创建xml文件夹 /user/hue/ ,并在该文件夹中 XMLcopy catalog.xml (your code) ```
REGISTER piggybank.jar ;

xmldata = LOAD 'XML/catalog.xml' USING org.apache.pig.piggybank.storage.XMLLoader('CD') as(doc:chararray);

data = FOREACH xmldata GENERATE FLATTEN(REGEX_EXTRACT_ALL(doc,'\s*(.)\s(.)\s(.)\s(.)\s(.)\s(.)\s')) AS (title:chararray, author:chararray, country:chararray, company:chararray, price:chararray, year:chararray);

DESCRIBE data;

dump data;

相关问题