PIG - 使用XPATH从XML检索数据

时间:2015-10-09 17:51:22

标签: hadoop xpath xml-parsing apache-pig

有n个这些类型的xml文件。

<students roll_no=1>
    <name>abc</name>
    <gender>m</gender>
    <maxmarks>
        <marks>
            <year>2014</year>
            <maths>100</maths>
            <english>100</english>
            <spanish>100</spanish>
        <marks>
        <marks>
            <year>2015</year>
            <maths>110</maths>
            <english>110</english>
            <spanish>110</spanish>
        <marks>
    </maxmarks>
    <marksobt>
        <marks>
            <year>2014</year>
            <maths>90</maths>
            <english>95</english>
            <spanish>82</spanish>
        <marks>
        <marks>
            <year>2015</year>
            <maths>94</maths>
            <english>98</english>
            <spanish>02</spanish>
        <marks>
    </marksobt>
</Students>

我需要输出

roll_no name    gender  year    eng_max_marks   maths_max_marks spanish_max_marks
1       abc     m       2014    100                 100          100
1       abc     m       2015    110                 110          110

我能够在单个语句中逐行检索标记,但不能用此提取roll_no和name。

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

B = FOREACH A GENERATE XPath(x, 'marks/year'), XPath(x, 'marks/english'), XPath(x, 'marks/math'), XPath(x, 'marks/spanish');

此回归

year    eng_max_marks   maths_max_marks spanish_max_marks
2014    100              100             100
2015    110              110             110

我可以提取两个块但不知道如何加入其他字段。我不能在整个联接中使用,因为我有很多其他文件。

现在让我们使用伪造属性名称(roll_no)。如何提取剩余的节点

name    gender  year    eng_max_marks   maths_max_marks spanish_max_marks
abc      m     2014      100             100             100
abc      m     2015      110             110             110

我不想使用标记(1)/英语方法,因为这些节点也可以变化,并且不想采用任何肮脏的方法。

任何指针????

0 个答案:

没有答案