2015-10-02 2 views
0

У меня есть XML-файлHadoop - петля PIG на узлах XML с помощью XPath

<Superfoo> 
<foo> 
    <Number>1</Number> 
    <childfoo>20</childfoo> 
</foo> 
<foo> 
    <Number>2</Number> 
    <childfoo>10</childfoo> 
</foo> 
<foo> 
    <Number>3</Number> 
    <childfoo>29</childfoo> 
</foo> 
</Superfoo> 

Мое требование заключается в петле на узлах. Я не хочу их жестко кодировать, поскольку он может варьироваться от одного XML к другому XML. Есть ли способ, которым мы можем достичь этого, используя PIG XPath.

A = LOAD 'foo.xml' using org.apache.pig.piggybank.storage.XMLLoader('Superfoo') as (x:chararray); 

B = FOREACH A GENERATE XPath(x, 'Superfoo/foo/Number'), XPath(x, 'Superfoo/foo/childfoo'); 
dump B; 

Я пробовал с кодом выше, но он возвращает только 1 строку, но с Foreach он должен возвращать все строки узла.

Возможно ли, что мы сможем сделать это через Hive используя цикл? Мне кажется трудным ....

Любые указатели ????

Спасибо.

ответ

1

Изменить код, как указано ниже.

A = LOAD 'foo.xml' using org.apache.pig.piggybank.storage.XMLLoader('foo') as (x:chararray); 

B = FOREACH A GENERATE XPath(x, 'foo/Number'), XPath(x, 'foo/childfoo'); 

dump B; 

Dump B будет производить выходной сигнал, как показано ниже:

(1,20)

(2,10)

(3,29)

+0

Любое предложение по HTTP : //stackoverflow.com/questions/32921201/hadoop-load-hive-tables-using-pig – Ajay

Смежные вопросы