MapReduce清洗数据乱码问题

本文介绍了在Hadoop MapReduce中遇到的中文乱码问题及其解决方法。当MapReduce读取GBK编码的文本数据时,由于Text类默认使用UTF-8编码,导致在map方法中直接使用toString()方法会出现乱码。解决之道在于使用Text对象的getBytes()方法获取字节数组,并用GBK编码进行解码,如`new String(lineValue.getBytes(), 0, lineValue.getLength(), "GBK")`,确保正确转换字符串。" 122195911,9143643,智邦科技上海办公室WLAN改造实践:Wi-Fi6全千兆网络,"['硬件工程', '网络设备', 'WLAN改造', 'Wi-Fi6技术', '办公网络建设']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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读入后直接使用该方法就会变成乱码。
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值