我有一个input.txt如下所示:
{"zone_id":12,"position":[100,200,300]}
{"zone_id":14,"position":[101,201,0]}
我的问题是如何让输出看起来如下:
(12, 100, 200, 300)
(14, 101, 201, 0)
感谢您的回答!
答案 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.
免责声明:我在哪里,我无法测试这个正则表达式,但希望你能得到这个想法。另外,我懒惰并使用点而不是特定字符。