[HADOOP] hadoop에서 enum으로 mapOutputValueClass를 설정하는 방법
HADOOPhadoop에서 enum으로 mapOutputValueClass를 설정하는 방법
내 매퍼 출력 값은 Enum의 한 유형이며, MapOutputValueClass를 Enum.class로 설정하지만 항상 가져옵니다. 예상지도에서 값 유형이 일치하지 않습니다. StatisticTypes, received StatisticTypes $ 2
하위 클래스 대신 중첩 된 클래스를받은 것처럼 보입니다. Enum 클래스에 문제가 있습니까?
작업 설정 :
job.setMapOutputValueClass(StatisticTypes.class);
산출:
for(StatisticTypes statistic : dimensionCountMap.get(key)) {
context.write(key, statistic);
}
열거 형 :
public enum StatisticTypes implements Writable{
MAX {
@Override
public boolean aggregate(long v, LongWritable userId) {
if (v > value) {
value = v;
this.userId = userId;
return true;
}
return false;
}
@Override
public void write(DataOutput out) throws IOException {
ObjectWritable objWritable = new ObjectWritable(this);
objWritable.write(out);
}
@Override
public void readFields(DataInput in) throws IOException {
ObjectWritable objWritable = new ObjectWritable();
objWritable.readFields(in);
}
};
public LongWritable userId;
public long value;
public abstract boolean aggregate(long v, LongWritable userId);
public long getValue() {
return value;
};
public LongWritable getUserId() {
return userId;
}
@Override
public void write(DataOutput out) throws IOException {
ObjectWritable objWritable = new ObjectWritable(this);
objWritable.write(out);
}
@Override
public void readFields(DataInput in) throws IOException {
ObjectWritable objWritable = new ObjectWritable();
objWritable.readFields(in);
}
}
해결법
from https://stackoverflow.com/questions/49369532/how-to-set-mapoutputvalueclass-as-enum-in-hadoop by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 지도 축소를 위해 여러 개의 출력 파일을 가질 수 있습니까? (0) | 2019.07.01 |
---|---|
[HADOOP] 주어진 컬럼 이름으로 모든 테이블을 검색하고 Hadoop / Hive에이 컬럼 이름을 가진 테이블을 반환하는 방법은 무엇입니까? (0) | 2019.07.01 |
[HADOOP] Hadoop Directory with Spaces (0) | 2019.07.01 |
[HADOOP] 실패를 너무 많이 가져옵니다. (0) | 2019.07.01 |
[HADOOP] 외부 테이블 하이브 만들기, 위치에 여러 파일이 있습니다. (0) | 2019.07.01 |