3

我对 Hadoop 和 Pig 都很陌生。我已经能够做一些简单的程序,但是当 XML 文件的一部分格式不正确时,一个对我来说很费力的程序是处理 XML。

我可以使用 XMLLoader('tag') 从一个很棒的 xml 文件中获取所有标签。然而,如果一个人错过了一个结构良好的封闭标签猪将停在那一个。例如

<tag>
</tag>
<tag>
</tag1>
<tag>
</tag>

这只会拾取第一个有效标签。现在,我有使用 JAQL 的经验并且能够忽略错误记录,以便应用程序获取第二个标签。

我的问题是:他们是一种使用 Pig 而不是 JAQL 来处理糟糕的 XML 格式的方法吗?

4

1 回答 1

0

我一直在查看猪 XMLLoader 代码,格式错误的标签似乎发生了什么是加载器从未注意到标签结束,也没有办法注意到它已经进入了一个新的主标签。似乎没有办法使用 XMLLoader,因为它目前可以解决这个问题。

但是,可以修改 XMLLoader 以使其以您希望的方式工作。可能是通过更改skipToTag 方法中的条件,以便如果它遇到指定开始标签的另一个实例,它会向前跳过,忽略格式错误的标签。请记住,如果您有同名的嵌套标签(例如地址作为根,但地址作为文档中较低的元素),这会搞砸,所以它不是万无一失的。

然而,在大多数情况下,预先验证 XML 似乎是一个更好的选择,或者让预处理器仅将有效的 XML 提取到文件中,然后运行 ​​pig。

希望这可以帮助。

于 2013-11-06T14:39:24.790 回答