org.apache.hadoop.mapreduce.*
次のプロパティを持つテキスト ファイルを処理するには、(API を使用して) map reduce バッチを作成する必要があります。
- ISO-8859-1エンコーディング。
- CSVライク
- セパレータは
0xef
TextInputFormat
自分でフィールド分割を行いたいので、 a を使用します。ただし、TextInputFormat
UTF-8 でエンコードされたファイルしか処理できないようです。
MAPREDUCE-232によると、2008 年から保留中のパッチがありますが、回避策を見つけることができませんでした。私のオプションは何ですか?事前に UTF-8 でファイルを変換することはできません。
編集:Hadoopのソースコードを読んでいるときに、可能な回避策を見つけました。LineReader
& フレンズはバイトのみを扱います。バイトを文字列に変換することはありません。ハードコードされた行末セパレータのみに一致し、バイト バッファを埋めます。ISO_8859_1 と UTF-8 は に対して同じバイト シーケンスを共有するため\n
、次のように使用できます。
public class MyMapper extends Mapper<IntWritable, Text, Text, Text> {
public void map(IntWritable key, Text value, Context context)
throws IOException, InterruptedException {
String data = new String(value.getBytes(),
0, value.getLength(),
Charsets.ISO_8859_1)
// [...]
}
}
この解決策は受け入れられますか?