Map Reduce解析hadoop 2.2中的JSON数据

时间:2014-04-04 02:07:17

标签: json hadoop mapreduce

您好我有以下格式的JSON。我需要在map函数中解析它以获取所有记录的性别信息。

[
    {
        "SeasonTicket" : false, 
        "name" : "Vinson Foreman", 
        "gender" : "male", 
        "age" : 50, 
        "email" : "vinsonforeman@cyclonica.com", 
        "annualSalary" : "$98,501.00", 
        "id" : 0
    }, 
    {
        "SeasonTicket": true, 
        "name": "Genevieve Compton", 
        "gender": "female", 
        "age": 28, 
        "email": "genevievecompton@cyclonica.com", 
        "annualSalary": "$46,881.00", 
        "id": 1
    }, 
    {
        "SeasonTicket": false, 
        "name": "Christian Crawford", 
        "gender": "male", 
        "age": 53, 
        "email": "christiancrawford@cyclonica.com", 
        "annualSalary": "$53,488.00", 
        "id": 2
    }
]

我尝试过使用JSONparser但是无法通过JSON结构。我被建议使用JAQL和pig但不能这样做。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我的理解是你有一个包含JSON数组的巨大文件。其中,您需要将相同内容读取到映射器并发出说<id : gender>。挑战在于JSON属于多行。

在这种情况下,我建议您将默认分隔符更改为&#34;}&#34;而不是&#34; \ n&#34;。

在这种情况下,您将能够将部分JSON作为值获取到map方法中。你可以丢弃钥匙即。字节偏移并对值执行轻微的重新分段,例如删除不需要的[]或添加字符,如&#34;}&#34;然后解析剩余的字符串。

此解决方案有效,因为在JSON中没有嵌套,并且}是根据给定示例的有效JSON结束分隔符。

要更改默认分隔符,只需将属性textinputformat.record.delimiter设置为"}"

请查看this示例。

同时检查this jira。