[HADOOP] Hadoop : LongWritable을 org.apache.hadoop.io.IntWritable에 캐스트 할 수 없습니다.
HADOOPHadoop : LongWritable을 org.apache.hadoop.io.IntWritable에 캐스트 할 수 없습니다.
나는 입력 파일에 주어진 온도의 평균값을 가져 가고 싶다. Mapper와 Reducer synatax는 괜찮은 것처럼 보이지만 다음과 같은 오류가 발생한다.
Unable to load realm info from SCDynamicStore
13/02/17 08:03:28 INFO mapred.JobClient: Task Id : attempt_201302170552_0009_m_000000_1, Status : FAILED
java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.IntWritable
at org.apache.hadoop.examples.TempMeasurement$TempMapper.map(TempMeasurement.java:26)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
내 매퍼 함수는 다음과 같습니다.
public static class TempMapper extends Mapper<IntWritable, Text, IntWritable, FloatWritable>{
@Override
protected void map(IntWritable key, Text value, Context context)
throws IOException, InterruptedException {
//code for getting date and temperature
String temp = columns.get(3);
context.write(new IntWritable(year), new FloatWritable(Float.valueOf(temp)));
}
}
그리고 Reduce는 :
public static class IntSumReducer
extends Reducer<IntWritable, FloatWritable, IntWritable ,FloatWritable> {
private FloatWritable result = new FloatWritable();
public void reduce(IntWritable key, Iterable<FloatWritable> values,
Context context
) throws IOException, InterruptedException {
//code for making calculations
context.write(key, result);
}
}
입력 파일은 다음과 같습니다.
11111 , 0,19900101, 44.04 ,
11112, 0, 19900102, 50.00,
11113, 3, 19910203, 30.00,
어떤 도움을 주시면 감사하겠습니다.
해결법
-
==============================
1.텍스트 파일을 매핑하는 매퍼의 핵심 클래스는 항상 LongWritable입니다. 이는 현재 행의 바이트 오프셋을 포함하고 있기 때문에 정수가 쉽게 오버플로 될 수 있기 때문입니다.
텍스트 파일을 매핑하는 매퍼의 핵심 클래스는 항상 LongWritable입니다. 이는 현재 행의 바이트 오프셋을 포함하고 있기 때문에 정수가 쉽게 오버플로 될 수 있기 때문입니다.
기본적으로 코드를 다음과 같이 변경해야합니다.
public static class TempMapper extends Mapper<LongWritable, Text, IntWritable, FloatWritable>{ @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { //code for getting date and temperature String temp = columns.get(3); context.write(new IntWritable(year), new FloatWritable(Float.valueOf(temp))); } }
from https://stackoverflow.com/questions/14922087/hadoop-longwritable-cannot-be-cast-to-org-apache-hadoop-io-intwritable by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 맵의 예상 값에서 키의 하둡 유형 불일치 텍스트 수신 값 LongWritable (0) | 2019.06.24 |
---|---|
[HADOOP] Hadoop MapReduce : 기본 매퍼 수 (0) | 2019.06.24 |
[HADOOP] 여러 감속기가 Hadoop에서 하나의 부품 파일 만 출력하는 방법은 무엇입니까? (0) | 2019.06.24 |
[HADOOP] 페치 실패 횟수가 너무 많음 : 클러스터의 Hadoop (x2) (0) | 2019.06.24 |
[HADOOP] hadoop 매퍼에있는 객체 유형의 키 (0) | 2019.06.24 |