如何更改HDFS中的字符集

时间:2013-10-25 08:13:41

标签: hadoop hdfs nscharacterset

我有一个小的Hadoop集群版本1.1.2,同时在用德语编写的文本文件上运行一些基本的字数我注意到HDFS没有处理好像ü,ö,ä等特殊字符。

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

这里有一些我在这里得到“ö”的例子:

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

1 个答案:

答案 0 :(得分:1)

既然你提到了单词计数示例,我猜你正在使用Text。 Text假定底层内容的字符集是UTF8。如果您的字符集不是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与charset无关。它只存储二进制数据。 “charset”是一个如何解释文本文件中的二进制数据的概念。