美文网首页
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