2015-01-27 3 views
0

Я использую пользовательские типы данных в Hadoop. Вот мой код:EOF Исключение при использовании пользовательских типов данных Hadoop - biginsghts

Пользовательские данные Тип - массивы сумм появлений в течение недели. каждая клетка представляет собой один день:

public class Days implements Writable { 

private int[] days; 

public Days() { 
    days = new int[7]; 
} 

public int[] getDays() { 
    return days; 
} 

public void updateDayCount(int day, int value){ 
    days[day] += value; 
} 

public void addDays(int[] other){ 
    for(int i=0 ; i<7 ; i++) 
     days[i] += other[i]; 
} 

@Override 
public void readFields(DataInput in) throws IOException { 
    days = new int[7]; 
    for(int i=0 ; i<7 ; i++) 
     days[i] = in.readInt(); 
} 

@Override 
public void write(DataOutput out) throws IOException { 
    for(int i=0 ; i<7 ; i++) 
     out.write(days[i]); 
} 

@Override 
public String toString() { 
    String ans = ""; 
    for(int i=0 ; i<7 ; i++) 
     ans += days[i] + ","; 
    ans = ans.substring(0, ans.length()-1); 
    return ans; 
} 

Mapper- получить дату - конвертировать в день и добавьте к определенной ячейке в типе данных:

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


    if(key.get() > 0){ 
     String line = value.toString(); 
     String[] rowData = line.split(","); 

     if(rowData.length < 6){ 
      return; 
     } 

     Days outDays = new Days(); 

     outUserID = getUser(rowData); 

     String time = rowData[timeData].replaceAll("\"", ""); 

     int day = -1; 
     try { 
      day = getTheDay(time); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     //error 
     if(day == -1) 
      return; 

     outDays.updateDayCount(day, 1); 

     context.write(outUserID, outDays); 
    } 
} 

я запускаю этот код я получаю эту EOFexception- он сказал это по методу readFields:

ReduceAttempt TASK_TYPE="REDUCE" TASKID="task_201412070957_3019_r_000000" TASK_ATTEMPT_ID="attempt_201412070957_3019_r_000000_1" TASK_STATUS="FAILED" FINISH_TIME="1422358846237" HOSTNAME="bgu-bi-server-02\.haifa\.ibm\.com" ERROR="java\.io\.EOFException 
at java\.io\.DataInputStream\.readInt(DataInputStream\.java:403) 
at myPack\.Days\.readFields(Days\.java:35) 

Я действительно не знаю почему. кто-нибудь может понять, почему и может быть решение? пожалуйста помоги.

ответ

0

в пользовательских данных, то предположим быть-

public void write(DataOutput out) throws IOException { 
for(int i=0 ; i<7 ; i++) 
    out.writeInt(days[i]); 
} 

все равно спасибо!

+0

А, да, это сделало бы это, хорошо поймать это. – suiterdev

Смежные вопросы