我有一个小的Hadoop集群版本1.1.2,同时在用德语编写的文本文件上运行一些基本的字数我注意到HDFS没有处理好像ü,ö,ä等特殊字符。
有没有办法更改HDFS中使用的CharacterSet?
这里有一些我在这里得到“ö”的例子:
angeh�ren, angeh�rige, angeh�rigen, angeh�riger
答案 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”是一个如何解释文本文件中的二进制数据的概念。