Hadoop字符轉碼的實現

Hadoop默認使用的是UTF-8編碼方式。在Hadoop使用過程中,需要將其他的編碼方式進行轉碼以防止亂碼的出現。

Hadoop中出現亂碼的情景是TextFileInputFormat,即處理Text的情景。在這種情況下,Value一般是Text。爲了實現轉碼我們看一下Text的實現。在Text中包含了源數據的byte數組以及其中數據的長度,這是原始數據,不經過編碼的。在Text類中包含了CharsetEncoderCharsetDecoder兩個變量,這兩個變量都是UTF-8編碼。當把byte數據寫到文件時(writeString方法)需要對其進行Encode,將其編碼成UTF-8格式。當Text讀入數據時(readString方法),用Decoder將其從UTF-8模式轉碼成Unicode

Map執行過程中,Textbyte數組是原始數據的byte數組,可以直接將該數組進行轉碼,具體實現如下:

protected void map(LongWritable key, Text value, Context context)

throws IOException, InterruptedException {

byte[] valueBytes = value.getBytes();

String result = new String(valueBytes, "GB2312");

context.write(key, new Text(result));

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章