hadoop mapper读取文本编码乱码问题

2018-08-21  本文已影响0人  atok

问题原因

hadoop 在编码时都是写死的utf-8,如果文件编码为GBK,就会出现乱码。

解决方法

在mapper或reducer读取文本的时候,将Text转换下编码即可。编码转换使用下面的transformTextToUtf8(Text text, String encoding)

将输入的Text类型的value转换为字节数组,使用String的构造器String(byte[] bytes, int offset, int length, Charset charset),通过使用指定的charset解码指定的byte子数组,构造一个新的String。

如果需要map/reduce输出其它编码格式的数据,需要自己实现OutputFormat,在其中指定编码方式,而不能使用默认的TextOutputFormat。


public static Text transformTextToUTF8(Text text, String encoding) {

    String value = null;

    try {

    value = new String(text.getBytes(), 0, text.getLength(), encoding);

    } catch (UnsupportedEncodingException e) {

        e.printStackTrace();

    }

    return new Text(value);

}

上一篇 下一篇

猜你喜欢

热点阅读