Hadoop-textouputformat.разделитель использовать ctrlA (^A)
Я пытаюсь использовать ^A в качестве разделителя между ключом и значением в моих выходных файлах reduce. Я обнаружил, что настройка конфигурации " mapred.textoutputformat.разделитель "- это то, что я хочу, и это правильно переключает разделитель на",":
conf.set("mapred.textoutputformat.separator", ",");
но он не может обрабатывать символ ^A:
conf.set("mapred.textoutputformat.separator", "u0001");
выдает это ошибка:
ERROR security.UserGroupInformation: PriviledgedActionException as:user (auth:SIMPLE) cause:org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.lang.RuntimeException: org.xml.sax.SAXParseException; lineNumber: 68; columnNumber: 94; Character reference "&#
Я нашел этот билет https://issues.apache.org/jira/browse/HADOOP-7542 и увидеть, что они пытались исправить это, но вернулся патч из-за XML1.1 Проблемы.
поэтому мне интересно, удалось ли кому-нибудь установить разделитель на ^A (кажется довольно распространенным), используя легкую работу. Или если я должен просто установить и использовать tab separator.
спасибо!
я запускаю Hadoop 0.20.2-cdh3u5 на CentOS 6.2
1 ответов
оглядываясь вокруг, похоже, что есть, возможно, три варианта, которые я нашел для решения этой проблемы:
- ссылка на символ " " является недопустимым символом XML - подобный так вопрос
- символы Юникода / Ctrl G или Ctrl A как разделитель TextOutputFormat (Hadoop)
возможные решения, как описано в ссылке выше:
- вы можете Base64 кодировать символ разделителя. Вы затем необходимо создать пользовательский TextOutputFormat, который переопределяет метод getRecordWriter и декодирует разделитель с кодировкой Base64.
- создайте пользовательский TextOutputFormat снова, за исключением изменения символа разделителя по умолчанию на вкладке.
- укажите разделитель через XML-файл ресурсов. Можно указать пользовательский файл ресурсов с помощью метода addResource () конфигурации заданий.