apache中的json解析

e5nszbig  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(615)

我有一个json:

{"Name":"sampling","elementInfo":{"fraction":"3"},"destination":"/user/sree/OUT","source":"/user/sree/foo.txt"}

我发现我们可以将json加载到pigscript中。

A = LOAD ‘data.json’
USING PigJsonLoader();

但是如何在apachepig中解析json呢

--Sampling.pig
--pig -x mapreduce -f Sampling.pig -param input=foo.csv -param output=OUT/pig -param delimiter="," -param fraction='0.05'

--Load data
inputdata = LOAD '$input' using PigStorage('$delimiter');

--Group data
groupedByAll = group inputdata all;

--output into hdfs
sampled = SAMPLE inputdata $fraction;
store sampled into '$output' using PigStorage('$delimiter');

上面是我的Pig剧本。如何 parse apache pig中的json(每个元素)?我需要将上面的json作为输入并解析其 source,delimiter,fraction,output 然后传过来 $input,$delimiter,$fraction,$output 分别。
如何解析相同的。请建议

yyyllmsg

yyyllmsg1#

试试这个:

--Load data
inputdata = LOAD '/input.txt' using JsonLoader('Name:chararray,elementinfo:(fraction:chararray),destionation:chararray,source:chararray');

--Group data
groupedByAll = group inputdata all;

store groupedByAll into '/OUT/pig' using PigStorage(',');

现在您的输出看起来:

all,{(sampling1,(4),/user/sree/OUT1,/user/sree/foo1.txt),(sampling,(3),/user/sree/OUT,/user/sree/foo.txt)}

输入文件中的分数数据 {"fraction":"3"} 用双引号括起来。所以我使用分数作为字符,所以无法运行sample命令,所以我使用上面的脚本来获得结果。
如果要执行sample操作,请将分数数据转换为int,然后将得到结果。

相关问题