2014-07-24 45 views
0

我有一个JSON:JSON解析在Apache的猪

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

我发现,我们能够JSON加载到PigScript。

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

但如何在Apache的猪解析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'); 

以上是我的猪脚本。 如何parse json(每个元素)在Apache pig中? 我需要把上面的json作为输入并解析它的source,delimiter,fraction,output并分别通过$input,$delimiter,$fraction,$output

如何解析它。 请建议

回答

0

试试这个:

--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"}。所以我用分数作为chararray所以不能够运行示例命令,所以我用上面的脚本来得到结果。

如果要执行样本操作,将分数数据转换为整型,然后您将得到结果。

+0

谢谢MarHserus。但是如何解析这些元素?为了实现分数和分隔符?我的输入是:/user/sree/foo.txt –

+0

您期待输出的格式。 – MarHserus

+0

我期望输出为带分隔符的文件(不是json),它与输入文件(foo.txt)相同 –