public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
context.write(word, one);
}
}
在这种情况下,你只需要改变 String line = value.toString(); 至 String line = new String(value.getBytes(), 0, value.getLength(), "change_to_your_charset"); 顺便说一下,hdfs与charset无关。它只存储二进制数据。”“字符集”是一个如何解释文本文件中二进制数据的概念。
1条答案
按热度按时间7ajki6be1#
既然你提到了单词计数的例子,我猜你是在用文本。文本假定基础内容的字符集是utf8。如果您的字符集不是utf8,则需要从文本中获取byte[]并自行转换。
我不确定您是否正在使用以下代码(来自hadoop wiki):
在这种情况下,你只需要改变
String line = value.toString();
至String line = new String(value.getBytes(), 0, value.getLength(), "change_to_your_charset");
顺便说一下,hdfs与charset无关。它只存储二进制数据。”“字符集”是一个如何解释文本文件中二进制数据的概念。