在hadoop2.2中Mapreduce解析json数据

w46czmvw  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(362)

你好,我有一个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,但我做不到。
任何帮助都将不胜感激。

zzwlnbp8

zzwlnbp81#

据我所知,您有一个包含JSON数组的巨大文件。其中,您需要将相同的内容读入Map器并发出声明 <id : gender> . 挑战在于json会跨越多行。
在这种情况下,我建议您将默认分隔符改为“}”,而不是“\n”。
在这种情况下,您将能够将json的一部分作为值放入map方法中。您可以放弃键,即byte offset,对值进行轻微的重新分解,比如去掉不需要的[]或,添加“}”这样的字符,然后解析剩余的字符串。
此解决方案之所以有效,是因为json中没有嵌套,}是一个有效的json结束分隔符,如给定的示例所示。
要更改默认分隔符,只需设置属性 textinputformat.record.delimiter"}" 请看这个例子。
再看看这个吉拉。

相关问题