如何解析Pig中的复杂数据类型

时间:2015-02-26 18:42:06

标签: apache-pig

我有一个input.txt如下所示:

{"zone_id":12,"position":[100,200,300]} 
{"zone_id":14,"position":[101,201,0]} 

我的问题是如何让输出看起来如下:

(12, 100, 200, 300)
(14, 101, 201, 0)

感谢您的回答!

1 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题,但我认为最简单的方法是使用REGEX_EXTRACT_ALL

A = LOAD B FROM '...' USING TextLoader() AS (line:chararray);

B = FOREACH A GENERATE
    REGEX_EXTRACT_ALL(line, '^..zone_id..(\d*)..position..(\d*),(\d*),(\d*)..$');

此方法使用TextLoader一次读取一行(由换行符分隔)到chararray。 接下来,FOREACH...GENERATE应用REGEX_EXTRACT_ALL,它从括号内拉出每个组并将其返回到元组中。现在你可以做任何你想做的事。

注意您的数据是否发生变化。如果是这样,你将不得不写一个更灵活的正则表达式。

如果你想处理数字而不是字符串,你可以cast


我在这里使用REGEX_EXTRACT_ALL,因为我假设您的数据每次都会有些相似。如果您想要更强大的解决方案,可以查看JsonLoader。您可以将数据映射到模式,然后将它返回的嵌套字段投影到列中。

This seems like a reasonable blog post on the subject.


免责声明:我在哪里,我无法测试这个正则表达式,但希望你能得到这个想法。另外,我懒惰并使用点而不是特定字符。