복붙노트

[HADOOP] TwoDArrayWritable를 사용하여 매퍼에서 2D double 배열을 방출하는 방법

HADOOP

TwoDArrayWritable를 사용하여 매퍼에서 2D double 배열을 방출하는 방법

나는 값으로 TwoDArrayWritable을 사용하여 2D double 배열을 방출합니다.

context.write를 작성하는 방법 (키)

편집하다

그리고 감속기의 두 차원을 두 번 배열을 얻고 값을 인쇄하는 방법에 대해 설명합니다.

나는 매퍼에 쓴

row = E.length;
col = E[0].length;
                     TwoDArrayWritable array = new TwoDArrayWritable (DoubleWritable.class);
                     DoubleWritable[][] myInnerArray = new DoubleWritable[row][col];
                     // set values in myInnerArray
                     for (int k1 = 0; k1 < row; k1++) {
                        for(int j1=0;j1< col;j1++){
                            myInnerArray[k1][j1] = new DoubleWritable(E[k1][j1]);

                    }
                 array.set(myInnerArray);
                 context.write(clusterNumber, array);

그러나 Nullpointer 예외를 보여주는

13/11/01 16:34:07 INFO mapred.LocalJobRunner: Map task executor complete.
13/11/01 16:34:07 WARN mapred.LocalJobRunner: job_local724758890_0001
java.lang.Exception: java.lang.NullPointerException
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:404)
Caused by: java.lang.NullPointerException
    at org.apache.hadoop.io.TwoDArrayWritable.write(TwoDArrayWritable.java:91)
    at org.apache.hadoop.io.serializer.WritableSerialization$WritableSerializer.serialize(WritableSerialization.java:100)
    at org.apache.hadoop.io.serializer.WritableSerialization$WritableSerializer.serialize(WritableSerialization.java:84)
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:945)
    at org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:601)
    at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:85)
    at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:106)
    at edu.Mapper.map(Mapper.java:277)


Mapper.java:277 : context.write(clusterNumber, array);

해결법

  1. ==============================

    1.

     TwoDArrayWritable array = new TwoDArrayWritable (DoubleWritable.class);
     DoubleWritable[][] myInnerArray = new DoubleWritable[10][];
     // set values in myInnerArray
     array.set(myInnerArray);
     context.write(key, array);
    

    나는 배열의 일부 요소가 null이기 때문에 NPE가 믿습니다. 코드에서 당신은 내가하지 ECOL 동일한 안부를 궁금해 기록했다.

  2. ==============================

    2.얘들이 NPE 예외는 배열의 일부 null 값에 이슬 발생했습니다. 그렇지 않으면 거기에 자연에 반대하는 널 이슬을 넣어 것보다 배열의 값. 당신은 디버깅 모드에서이를 확인할 수 있습니다. 그래서 당신의 작업은 배열에는 null 값이없는 확인하는 것입니다.

    얘들이 NPE 예외는 배열의 일부 null 값에 이슬 발생했습니다. 그렇지 않으면 거기에 자연에 반대하는 널 이슬을 넣어 것보다 배열의 값. 당신은 디버깅 모드에서이를 확인할 수 있습니다. 그래서 당신의 작업은 배열에는 null 값이없는 확인하는 것입니다.

  3. from https://stackoverflow.com/questions/19721836/how-to-emit-2d-double-array-from-mapper-using-twodarraywritable by cc-by-sa and MIT license