2
Я пишу программу MapReduce, чтобы очистить некоторые файлы, хранящиеся в HDFS, так как я должен кодировать все файлы в UTF-8, я пытался кодировать значение Text в моем mapper, но у меня все еще есть ошибки в моем файле результатов.Кодирование файлов UTF-8 в hadoop
if(encoding.compareTo("UTF-8")!=0){
final Charset fromCharset = Charset.forName(encoding);
final Charset toCharset = Charset.forName("UTF-8");
String fixed = new String(value.toString().getBytes(fromCharset), toCharset);
result= new String(fixed);
Я также таможня LineReader, чтобы кодировать байты прочтенных в UTF-8, прежде чем, что он хранится в текстовом объекте.
//buffer contain the data readed in a line of the file
String s = new String(buffer, startPosn, appendLength);
byte ptext[] = Charset.forName("UTF-8").encode(s).array();
str.append(ptext, 0, ptext.length);
Помогите мне пожалуйста!
Какие фактические 'типы Writable' вы используете в вашей программе? В приведенных выше фрагментах кода не рассказывается история о том, как 'byte []' считываются и записываются в фактические реализации «Writable» (и эти два, вероятно, там, где ваша проблема лежит). –
Спасибо за ваш ответ @ArminBraun, я использую только Text i, создаю объект 'Writable', и я использую его как вывод в mapper, но ничего не происходит, потому что текст ввода в файле картографа неправильно построен: ' 25196921 | 03 | Обязательное условие ||| 2015-12-16 00: 00: 00.0' Я думаю, что вопрос заключается в том, как изменить тип входных параметров устройства отображения, чтобы изменить текст в другом объекте. (Поскольку текст объект может манипулировать только символами UFT-8). –