我对hadoop和pig都很陌生。我已经能够做一些简单的程序,但有一个让我很累的是,当xml文件的一部分格式不正确时处理xml。
我可以使用xmloader('tag')从一个xml文件中获取所有的标记,这很好。然而,如果一个丢失了一个格式良好的关闭标签清管器将停止在这一个。例如
<tag>
</tag>
<tag>
</tag1>
<tag>
</tag>
这将只拾取第一个有效标记。现在,我有了使用jaql的经验,可以忽略错误记录,这样应用程序就可以获取第二个标记。
我的问题是:他们的was是一种使用pig而不是jaql来处理糟糕的xml格式的方法吗?
1条答案
按热度按时间mzmfm0qo1#
我一直在看pig-xmloader代码,对于格式错误的标记,似乎发生了这样的情况:加载程序从来没有注意到标记结束,也没有办法注意到它输入了一个新的主标记。似乎没有办法使用xmloader,因为它目前可以解决这个问题。
但是,可以修改xmloader,使其以您希望的方式工作。可能是通过更改skiptotag方法中的条件,以便如果它运行到指定的开始标记的另一个示例中,它会跳转到该示例,忽略格式错误的标记。请记住,如果您有同名的嵌套标记(例如,address作为root,但address作为doc中较低的元素),那么这将导致混乱,因此这不是万无一失的。
然而,在大多数情况下,预先验证xml可能是更好的选择,或者让预处理器只将有效的xml提取到pig运行的文件中。
希望这有帮助。