NoClassDefFoundError:org / json / JSONObject - Hadoop MapReduce

时间:2015-06-20 09:58:44

标签: json maven hadoop noclassdeffounderror jsonobject

我正在尝试使用Json作为输入来执行Mapreduce作业。我在POM.xml中导入了JSON依赖项,并且Maven clean install正常运行。但是当我在Hadoop中运行Jar时,我在Mapper类上得到 “NoClassDefFoundError:org / json / JSONObject” 错误。 (我也尝试使用JSON Java外部Jar,但它不起作用。

这是我的测试映射器类:

package com.andrew.hadoopNBA.NbaJob1;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.json.*;



public class PointsRankingMapper    extends Mapper<Object, Text, Text, IntWritable> {

    public void map(Object key, Text value, Context context)
        throws IOException, InterruptedException {
        try {

            JSONObject jsn = new JSONObject(value.toString());
            System.out.println("printing JSON " + jsn);

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

这是Maven依赖:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20140107</version>
</dependency>

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

尝试:

<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
</dependency>

答案 1 :(得分:0)

您可以使用jackson来处理json。

<repositories>
    <repository>
        <id>codehaus</id>
        <url>http://repository.codehaus.org/org/codehaus</url>
    </repository>
  </repositories>

  <dependencies>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.8.5</version>
    </dependency>
  </dependencies>

或google&#39; gson

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>1.7.1</version>
</dependency>