복붙노트

[HADOOP] 사용자 정의 Hadoop 유형에 대한 ArrayWritable 구현

HADOOP

사용자 정의 Hadoop 유형에 대한 ArrayWritable 구현

어떻게 사용자 정의 하둡 유형에 대한 ArrayWritable을 정의 할 수 있습니까? Hadoop에서 데이터를 저장하는 사용자 정의 Hadoop 유형을 사용하여 역 색인을 구현하려고합니다.

개인 메일 클래스는 문서의 용어 빈도, 문서 ID 및 바이트 오프셋 목록을 저장합니다.

나는 문서 빈도 (용어가 나타나는 문서의 수)와 개인 게시 목록을 가진 게시 클래스를 가지고 있습니다.

IndividualPostings의 바이트 오프셋 목록에 대한 ArrayWritable 클래스를 확장하는 LongArrayWritable을 정의했습니다.

IndividualPosting에 대한 사용자 정의 ArrayWritable을 정의 할 때 로컬 배포 후 (Karmasphere, Eclipse 사용) 몇 가지 문제가 발생했습니다.

게시 클래스의 목록에있는 모든 개별 게시 인스턴스는 Reduce 메서드에서 다른 값을 얻더라도 같을 것입니다.

해결법

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

    1.ArrayWritable의 문서에서 :

    ArrayWritable의 문서에서 :

    이미 Hadoop에서 정의한 WritableComparable 유형으로이 작업을 수행했습니다. 다음은 LongWritable에 대한 구현을 가정 한 것입니다.

    public static class LongArrayWritable extends ArrayWritable
    {
        public LongArrayWritable() {
            super(LongWritable.class);
        }
        public LongArrayWritable(LongWritable[] values) {
            super(LongWritable.class, values);
        }
    }
    

    문서에 명시된대로 WritableComparable을 구현하는 모든 유형에서이 작업을 수행 할 수 있어야합니다. 예제 사용 :

    public class MyWritableComparable implements
            WritableComparable<MyWritableComparable> {
    
        // Some data
        private int counter;
        private long timestamp;
    
        public void write(DataOutput out) throws IOException {
            out.writeInt(counter);
            out.writeLong(timestamp);
        }
    
        public void readFields(DataInput in) throws IOException {
            counter = in.readInt();
            timestamp = in.readLong();
        }
    
        public int compareTo(MyWritableComparable other) {
            int thisValue = this.counter;
            int thatValue = other.counter;
            return (thisValue < thatValue ? -1 : (thisValue == thatValue ? 0 : 1));
        }
    }
    

    그리고 그것은 그렇게되어야합니다. 이는 Hadoop API의 버전 0.20.2 또는 0.21.0을 사용한다고 가정합니다.

  2. from https://stackoverflow.com/questions/4386781/implementation-of-an-arraywritable-for-a-custom-hadoop-type by cc-by-sa and MIT license