Hadoop字符转码的实现

2019-03-28 13:18|来源: 网络

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

}

相关问答

更多
  • 所谓的“云转码”就是在云服务器上转换视频格式 离线下载---运转吗--下载本地--ok'
  • 您可以删除,再重新试试。没有办法。这也算是一个bug把。。。
  • java是执行文件,不是目录 java path默认是java_home/bin/目录 这个目录底下应该 java和javac等文件
  • 先确认你是迅雷会员,将视频文件直接下载至离线空间,在离线空间中选择视频任务,再选择云转码,云转码完成后,就可以下载至本地了 在迅雷应用 移动中心 中提供本地视频转码功能(非会员也可以用,会员有云转码加速功能) 迅雷会员
  • 所谓的“云转码”就是在云服务器上转换视频格式 离线下载---运转吗--下载本地--ok'
  • 先引入urllib模块 假如我们要对下面的url进行转码,注意观察各种字符的变化 使用quote方法,进行转码 我们看看转码得到的结果: 我们想要得到原先的url,可以使用quote的逆函数unquote 得到反转码以后的url,我们看到这种方法并没有返回中文字符。
  • 貌似在数据前面加个u,可以正常显示,u'\u65b0\u5a18\u8857\u4fe1\u606f',新娘街信息 如果是windows的命令提示符里,print str.encode('gbk')转码就行了。
  • 我发现解决方案为: string.encode "IBM437" 正如评论中所述,我重读了Epson TM-T20打印机; 它设置为默认的“代码表”编号:0,意思是:“PC437:美国,标准欧洲” 事实上,我理解PC437参考2Code Page 437',请参阅:en.wikipedia.org/wiki/Code_page_437 所以我找到了有趣的宝石:github.com/ConradIrwin/encoding-codepage 显示代码页 437对应于charset "IBM437" 现在打印 ...
  • 听起来你正在寻找类似grep的程序,使用Hadoop Streaming很容易实现(Hadoop Java API也可以): 首先,编写一个映射器,如果正在处理的行包含您的搜索字符串,则输出正在处理的文件的名称。 我使用过Python,但任何语言都可以使用: #!/usr/bin/env python import os import sys SEARCH_STRING = os.environ["SEARCH_STRING"] for line in sys.stdin: if SEARCH_ ...
  • 在将注释保存到服务器之前,请使用以下代码 NSData *dataForEmoji = [comment dataUsingEncoding:NSNonLossyASCIIStringEncoding]; NSString *encodevalue = [[NSString alloc]initWithData:dataForEmoji encoding:NSUTF8StringEncoding]; 将encodedvalue保存到您的服务器。 在显示之前检索使用下面的代码时 NSString *emoj ...