Hadoop MapReduce 自定義數據類型


關於自定義數據類型,http://book.douban.com/annotation/17067489/ 一文中給出了一個比較清晰的說明和解釋。

在本文中,將給出一個簡單的自定義的數據類型例子。我曾使用該自定義的數據類型在HDFS上構建Lucene索引。

package hdfs.document;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;

import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableUtils;

/*
 * 自定義的一種hadoop輸出類型,存儲的內容是一個Map<String,String>.
 */
public class HDFSDocument implements Writable{
	HashMap<String,String> fields = new HashMap<String, String>();

	public void setFields(HashMap<String,String> fields){
		this.fields = fields;
	}
	public HashMap<String,String> getFields(){
		return this.fields;
	}

	@Override
	public void readFields(DataInput in) throws IOException {
		fields.clear();

		String key = null, value = null;

		int size = WritableUtils.readVInt(in);
		for (int i = 0; i < size; i ++){
				// 依次讀取兩個字符串,形成一個Map值
				key = in.readUTF();
				value = in.readUTF();
				fields.put(key,value);
			}
		}
	}

	@Override
	public void write(DataOutput out) throws IOException {
		String key = null, value = null;

		Iterator<String> iter = fields.keySet().iterator();
		while(iter.hasNext()){
			key = iter.next();
			value = fields.get(key);
			
			// 依次寫入<Key,Value>兩個字符串
			out.writeUTF(key);
			out.writeUTF(value);
		}
	}
}

  在MapReduce中使用時,設置相應的Map或Reduce的class類型即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM