私は小規模な Hadoop クラスター バージョン 1.1.2 を使用しています。ドイツ語で記述されたテキスト ファイルでいくつかの基本的な単語カウントを実行しているときに、HDFS が ü、ö、ä などの特殊文字を適切に処理していないことに気付きました。
HDFS で使用される CharacterSet を変更する方法はありますか?
ここで、「ö」が期待される結果の例をいくつか示します。
アンゲリゲ、アンゲリゲ、アンゲリゲン、アンゲリゲ
私は小規模な Hadoop クラスター バージョン 1.1.2 を使用しています。ドイツ語で記述されたテキスト ファイルでいくつかの基本的な単語カウントを実行しているときに、HDFS が ü、ö、ä などの特殊文字を適切に処理していないことに気付きました。
HDFS で使用される CharacterSet を変更する方法はありますか?
ここで、「ö」が期待される結果の例をいくつか示します。
アンゲリゲ、アンゲリゲ、アンゲリゲン、アンゲリゲ
単語数の例について言及したので、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 とは無関係です。バイナリデータのみを保存します。「文字セット」とは、バイナリデータをテキストファイルでどのように説明するかという概念です。