JSON映射器类中的错误

时间:2017-06-19 07:13:19

标签: java json hadoop mapreduce

我在MapReduce(Map only任务)上工作,它读取JSON文件并从JSON输入中提取元素。输入数据:

{"type":"cloud_monitor","format":"default","version":"1.0","id":"71101cb85441995d11a43bb","start":"1413585245.921","cp":"254623","message":{"proto":"http","protoVer":"1.1","status":"403","cliIP":"23.79.231.14","reqPort":"80","reqHost":"ksd.metareactor.com","reqMethod":"GET","reqPath":"%2findex.php","reqQuery":"path%3d57%26product_id%3d49%26route%3d%255Cwinnt%255Cwin.ini%2500.","respCT":"text/html","respLen":"286","bytes":"286","UA":"mozilla-saturn","fwdHost":"origin-demo2-akamaized.scoe-sil.net"},"reqHdr":{"accEnc":"gzip,%20deflate","cookie":"PHPSESSID%3dkkqoodvfe0rt9l7lbvqghk6e15%3bcurrency%3dUSD%3blanguage%3den"}}

我已经为JSON Arrays声明了String变量:Message& reqHdr你可以在context.write()方法中看到它们

地图类:

public class JsonMapper extends Mapper<LongWritable, Text, Text, Text> {

public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
    String type;
    String format;
    String version;
    String id;
    String start;
    String cp;
    // variables for message and reqHdr
    String[] line = value.toString().split("\\n");
    if (line.length > 0) {
        for(int i=0; i<line.length; i++) {
            try {
                JSONObject jsonobj      = new JSONObject(line[i]);
                    type    = (String) jsonobj.get("type");
                    format  = (String) jsonobj.get("format");
                    version = (String) jsonobj.get("version");
                    id      = (String) jsonobj.get("id");
                    start   = (String) jsonobj.get("start"); 
                    cp      = (String) jsonobj.get("cp");

                // Message Variable array
                JSONArray messageArray  = (JSONArray) jsonobj.get("message");
                for(int j=0; j<messageArray.length(); j++) {
                    JSONObject jsonmessageobject = messageArray.getJSONObject(j);
                    proto       = jsonmessageobject.getString("proto");
                    protoVer    = jsonmessageobject.getString("protoVer");
                    cliIP       = jsonmessageobject.getString("cliIP");
                    reqPort     = jsonmessageobject.getString("reqPort");
                    reqHost     = jsonmessageobject.getString("reqHost");
                    reqMethod   = jsonmessageobject.getString("reqMethod");
                    reqPath     = jsonmessageobject.getString("reqPath");
                    reqQuery    = jsonmessageobject.getString("reqQuery");
                    reqCT       = jsonmessageobject.getString("reqCT");
                    reqLen      = jsonmessageobject.getString("reqLen");
                    sslVer      = jsonmessageobject.getString("sslVer");
                    status      = jsonmessageobject.getString("status");
                    redirURL    = jsonmessageobject.getString("redirURL");
                    respCT      = jsonmessageobject.getString("respCT");
                    respLen     = jsonmessageobject.getString("respLen");
                    bytes       = jsonmessageobject.getString("bytes");
                    UA          = jsonmessageobject.getString("UA");
                    fwdHost     = jsonmessageobject.getString("fwdHost");
                }

                // reqHdr variable array
                JSONArray reqHdrArray   = (JSONArray) jsonobj.get("reqHdr");
                for(int k=0; k<reqHdrArray.length(); k++) {
                    JSONObject jsonreqHdrobject = reqHdrArray.getJSONObject(i);
                    accEnc      = jsonreqHdrobject.getString("accEnc");
                    accLang     = jsonreqHdrobject.getString("accLang");
                    auth        = jsonreqHdrobject.getString("auth");
                    reqHdr_cacheCtl = jsonreqHdrobject.getString("cacheCtl");
                    reqHdr_conn = jsonreqHdrobject.getString("conn");
                    reqHdr_contMD5 = jsonreqHdrobject.getString("contMD5");
                    cookie      = jsonreqHdrobject.getString("cookie");
                    DNT         = jsonreqHdrobject.getString("DNT");
                    expect      = jsonreqHdrobject.getString("expect");
                    ifMatch     = jsonreqHdrobject.getString("ifMatch");
                    ifMod       = jsonreqHdrobject.getString("ifMod");
                    ifNone      = jsonreqHdrobject.getString("ifNone");
                    ifRange     = jsonreqHdrobject.getString("ifRange");
                    ifUnmod     = jsonreqHdrobject.getString("ifUnmod");
                    range       = jsonreqHdrobject.getString("range");
                    referer     = jsonreqHdrobject.getString("referer");
                    te          = jsonreqHdrobject.getString("te");
                    upgrade     = jsonreqHdrobject.getString("upgrade");
                    reqHdr_via  = jsonreqHdrobject.getString("via");
                    xFrwdFor    = jsonreqHdrobject.getString("xFrwdFor");
                    xReqWith    = jsonreqHdrobject.getString("xReqWith");
                }
            context.write(new Text("cloud_monitor"), new Text(type + format + version + id + start + cp + proto + protoVer + cliIP + reqPort + 
                    reqHost + reqMethod + reqPath + reqQuery + reqCT + reqLen + sslVer + status + redirURL + respCT + respLen + bytes + UA + fwdHost + accEnc   + accLang + auth + 
                    reqHdr_cacheCtl + reqHdr_conn + reqHdr_contMD5 + cookie + DNT + expect + ifMatch + ifMod + ifNone + ifRange + ifUnmod + range + referer + te +
                    upgrade + reqHdr_via + xFrwdFor + xReqWith ));
            } catch (JSONException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
}

我收到以下错误消息:

Error: java.lang.ClassNotFoundException: org.json.JSONException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.Class.forName(Class.java:270)
    at org.apache.hadoop.conf.Configuration.getClassByNameOrNull(Configuration.java:2138)
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2103)
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2197)
    at org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:196)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:745)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

有人能告诉我我是否正确地进行JSON解析,特别是JSON Arrays(message,reqHdr)部分或我如何修复bug?

1 个答案:

答案 0 :(得分:0)

您必须下载org.json far文件,然后将其添加到您的项目中。

您可以下载jar:here

相关问题