MapReduce清洗数据乱码问题

hadoop的MapReduce读取文件处理数据时遇到的中文字乱码问题

MapReduce读取数据在Map端的map方法里进行拆分解析,map方法读取到的每行数据类型为Text,hadoop中的Text类内部编码格式是写死的UTF-8格式,需要在map方法读取到数据后直接进行编码转换。
即解决方案为:
用String s=new String(lineValue.getBytes(),0,lineValue.getLength(),“GBK”);替换String s=lineValue.toString();(lineValue即为map方法中读取的一行文本数据Text的对象)
详细解释如下:

public class Map extends Mapper<LongWritable, Text, Text, Text>{
	@Override
	public void map(LongWritable lineNum,Text lineValue,Context context) throws IOException, InterruptedException {
		String s=new String(lineValue.getBytes(),0,lineValue.getLength(),"GBK");
		//String s=lineValue.toString()
	 /*直接使用toString会出现乱码,这是由于Text这个Writable类型造成的,它是文本按照UTF-8格式编码的Writable,
	 而Java中的String是Unicode字符编码。所以直接使用lineValue.toString()方法,会默认其中的字符都是按照UTF-8进行解码的
	 原本GBK编码的数据使用Text读入后直接使用该方法就会变成乱码。
	
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值