[HADOOP] TwoDArrayWritable를 사용하여 매퍼에서 2D double 배열을 방출하는 방법
HADOOPTwoDArrayWritable를 사용하여 매퍼에서 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.
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.얘들이 NPE 예외는 배열의 일부 null 값에 이슬 발생했습니다. 그렇지 않으면 거기에 자연에 반대하는 널 이슬을 넣어 것보다 배열의 값. 당신은 디버깅 모드에서이를 확인할 수 있습니다. 그래서 당신의 작업은 배열에는 null 값이없는 확인하는 것입니다.
얘들이 NPE 예외는 배열의 일부 null 값에 이슬 발생했습니다. 그렇지 않으면 거기에 자연에 반대하는 널 이슬을 넣어 것보다 배열의 값. 당신은 디버깅 모드에서이를 확인할 수 있습니다. 그래서 당신의 작업은 배열에는 null 값이없는 확인하는 것입니다.
from https://stackoverflow.com/questions/19721836/how-to-emit-2d-double-array-from-mapper-using-twodarraywritable by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 원격 HDFS 액세스 (0) | 2019.09.22 |
---|---|
[HADOOP] 맵리 듀스를 사용하여 중복 값을 제거하는 방법 (0) | 2019.09.22 |
[HADOOP] 하둡과 함께 제공되는 기본 hashpartioner로 대체 (0) | 2019.09.22 |
[HADOOP] 어떻게 하둡의 각 단계 (지도, 셔플 / 정렬 감소)의 지속 시간을 측정 할 수있다? (0) | 2019.09.22 |
[HADOOP] 커버 로스 | 클라우 데라 | KrbException : HMAC SHA1-96와 암호화 유형 AES256 CTS 모드 (0) | 2019.09.22 |