我有一个小型 Hadoop 集群版本 1.1.2,在对用德语编写的文本文件运行一些基本字数统计时,我注意到 HDFS 不能很好地处理特殊字符,如 ü、ö、ä 等。
有没有办法改变 HDFS 中使用的 CharacterSet ?
这里有一些我在这里得到的例子,预计会有一个“ö”:
angeh�ren, angeh�riger, angeh�rigen, angeh�riger
我有一个小型 Hadoop 集群版本 1.1.2,在对用德语编写的文本文件运行一些基本字数统计时,我注意到 HDFS 不能很好地处理特殊字符,如 ü、ö、ä 等。
有没有办法改变 HDFS 中使用的 CharacterSet ?
这里有一些我在这里得到的例子,预计会有一个“ö”:
angeh�ren, angeh�riger, angeh�rigen, angeh�riger
既然您提到了字数统计示例,我猜您使用的是 Text。文本假定基础内容的字符集是 UTF8。如果你的 charset 不是 UTF8,你需要从 Text 中获取 byte[] 并自行转换。
我不确定您是否使用以下代码(来自hadoop wiki):
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 与字符集无关。它只存储二进制数据。“字符集”是一个如何解释文本文件中的二进制数据的概念。