Hadoop 如何更改HDFS中的字符集

Hadoop 如何更改HDFS中的字符集,hadoop,hdfs,nscharacterset,Hadoop,Hdfs,Nscharacterset,我有一个小型的Hadoop集群版本1.1.2,在对用德语编写的文本文件运行一些基本的字数统计时,我注意到HDFS不能很好地处理特殊字符,如u、ö、ä等 有没有办法更改HDFS中使用的字符集 这里有一些我在这里得到的“ö”的例子: angehèèè½ren, angehèèèè½rige, 安杰里根, angehïïïï½riger既然您提到了单词计数示例,我猜您使用的是文本。文本假定基础内容的字符集为UTF8。如果您的字符集不是UTF8,则需要从文本中获取字节[],并自行转换 我不确定您是否使用

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

有没有办法更改HDFS中使用的字符集

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

angehèèè½ren, angehèèèè½rige, 安杰里根,
angehïïïï½riger

既然您提到了单词计数示例,我猜您使用的是文本。文本假定基础内容的字符集为UTF8。如果您的字符集不是UTF8,则需要从文本中获取字节[],并自行转换

我不确定您是否使用以下代码(从):

在这种情况下,您只需要更改
String line=value.toString()
to
String line=新字符串(value.getBytes(),0,value.getLength(),“将\u更改为\u您的\u字符集”)

顺便说一下,HDFS与字符集无关。它只存储二进制数据。“字符集”是一个如何解释文本文件中二进制数据的概念

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);
           }
}