2015-06-20 119 views
1

我試圖做一個使用Json作爲輸入的Mapreduce作業。我在POM.xml中導入了JSON依賴項,並且Maven clean install正常運行。但是當我在Hadoop中運行Jar時,我得到「NoClassDefFoundError:org/json/JSONObject」 Mapper類錯誤。 (我也試圖與JSON的Java外部JAR,但它不工作NoClassDefFoundError:org/json/JSONObject - Hadoop MapReduce

這是我的測試映射類:

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

您可以使用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> 

或谷歌的gson

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

嘗試:

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

這種依賴性似乎不再受支持 – AndryGP