shu*_*aat 3 hadoop apache-pig xml-parsing
我正在使用pig latin进行大型XML转储.我试图获得猪拉丁语中的xml节点的值.该文件就像
<username> Shujaat </ username>
我想得到Shujaat的输入.我尝试了piggybank XMLLoader但它只分离了xml标签及其值.代码是
register piggybank.jar;
A = load 'username.xml' using org.apache.pig.piggybank.storage.XMLLoader('username')
as (x: chararray);
B = foreach A generate x;
Run Code Online (Sandbox Code Playgroud)
此代码也为我提供了用户名标签和值.我只需要价值观.知道怎么做吗?我发现了正则表达但不知道多少?谢谢
您提供的示例元素可以通过以下方式提取:
B = foreach A GENERATE REGEX_EXTRACT(x, '<username>(.*)</username>', 1)
AS name:chararray;
Run Code Online (Sandbox Code Playgroud)
像这样的嵌套元素:
<user>
<id>456</id>
<username>Taylor</username>
</user>
Run Code Online (Sandbox Code Playgroud)
可以用这样的东西提取:
B = foreach A GENERATE FLATTEN(REGEX_EXTRACT_ALL(x,
'<user>\\n\\s*<id>(.*)</id>\\n\\s*<username>(.*)</username>\\n\\s*</user>'))
as (id: int, name:chararray);
(456,Taylor)
Run Code Online (Sandbox Code Playgroud)
您肯定需要定义一个更复杂的正则表达式,以满足您的所有需求,即:处理空元素,属性等.另一个选择是编写一个自定义UDF,它使用Java库来解析XML的内容,这样就可以避免编写(复制)复杂的,容易出错的正则表达式.