美文网首页
hadoop mapper读取文本编码乱码问题

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

作者: atok | 来源:发表于2018-08-21 08:24 被阅读0次

问题原因

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);

}

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/anfdiftx.html