0

我有一个小型 Hadoop 集群版本 1.1.2,在对用德语编写的文本文件运行一些基本字数统计时,我注意到 HDFS 不能很好地处理特殊字符,如 ü、ö、ä 等。

有没有办法改变 HDFS 中使用的 CharacterSet ?

这里有一些我在这里得到的例子,预计会有一个“ö”:

angeh�ren, angeh�riger, angeh�rigen, angeh�riger

4

1 回答 1

1

既然您提到了字数统计示例,我猜您使用的是 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 与字符集无关。它只存储二进制数据。“字符集”是一个如何解释文本文件中的二进制数据的概念。

于 2013-10-25T09:14:34.713 回答