我正在尝试使用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>
有什么想法吗?
答案 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>