你好,游客 登录 注册 搜索
背景:
阅读新闻

Hadoop字符转码的实现

[日期:2012-12-09] 来源:Linux社区  作者:zuochanxiaoheshang [字体: ]

Hadoop默认使用的是UTF-8编码方式。在Hadoop使用过程中,需要将其他的编码方式进行转码以防止乱码的出现。

在Hadoop中出现乱码的情景是TextFileInputFormat,即处理Text的情景。在这种情况下,Value一般是Text。为了实现转码我们看一下Text的实现。在Text中包含了源数据的byte数组以及其中数据的长度,这是原始数据,不经过编码的。在Text类中包含了CharsetEncoder和CharsetDecoder两个变量,这两个变量都是UTF-8编码。当把byte数据写到文件时(writeString方法)需要对其进行Encode,将其编码成UTF-8格式。当Text读入数据时(readString方法),用Decoder将其从UTF-8模式转码成Unicode。

在Map执行过程中,Text的byte数组是原始数据的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));

}

linux
相关资讯       Hadoop应用  Hadoop字符转码 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款