Мне нужно переместить сложное значение (реализует Writable) из результата 1-й работы по сокращению карты для ввода другой работы по уменьшению количества карт. Результаты 1-го задания сохранены в файле. Файл может хранить текстовые данные или BytesWritable (с выходными данными по умолчанию). Поэтому мне нужен простой способ конвертировать мой Writable в Text или To BytesWritable и из него. Он существует? Любой альтернативный способ сделать это? Большое спасибоСохраните и прочитайте сложное Записываемое значение в задаче Hadoop
ответ
Пользователь irW прав, используйте SequenceFileOutputFormat. SequenceFile решает эту проблему, не переходя в Text Writable. При настройке вашей работы, используйте job.setOutputKeyClass и job.setOutputValueClass установить Записываемые подклассы, которые вы используете:
job.setOutputKeyClass(MyWritable1.class);
job.setOutputValueClass(MyWritable2.class);
job.setOutputFormatClass(SequenceFileOutputFormat.class);
Это будет использовать формат Hadoop SequenceFile для хранения Writables. Затем в следующей работе, используйте SequenceFileInputFormat:
job.setInputFormatClass(SequenceFileInputFormat.class);
затем клавишу ввода и значение для картографа в этой работе будет два Записываемых классов, первоначально указанных в качестве вывода в предыдущей работе.
Обратите внимание, что ваш сложный подкласс Writable выполняется правильно. Помимо того факта, что у вас должен быть пустой конструктор, методы write и readFields должны быть реализованы таким образом, чтобы любые поля Writable в классе также записывали и читали их информацию.
Поскольку я являюсь поклонником сохранения простого, я добавлю это побочное предложение в комментарии. Если вы в любой момент можете захотеть использовать что-либо, кроме Java API, для чтения ваших файлов, вместо этого вы захотите использовать Avro, который является независимым от языка форматом сериализации. Это позволит вам легко обрабатывать ваши данные с помощью полезных инструментов, таких как Pig или любая программа, совместимая с потоковой передачей MapReduce. Я пережил боль от использования SequenceFiles и сожалею об этом, посмотри на этот вопрос: http://stackoverflow.com/questions/18884666/handling-writables-fully-qualified-name-changes-in-hadoop-sequencefile –
- 1. Hadoop MapFile: как перенести записываемое значение в исходный класс?
- 2. Прочитайте значение пикселя в изображении и сохраните файл OpenCv
- 3. Сохраните и прочитайте файл на диске
- 4. Прочитайте и сохраните переменное количество аргументов java
- 5. Зациклируйте строки и прочитайте в файлах и сохраните
- 6. Прочитайте данные из ячейки DataGridView и сохраните их в ListView
- 7. Прочитайте xml-файл и сохраните данные в массиве в jquery
- 8. Прочитайте CSV и сохраните в двух двойных массивах в C
- 9. Прочитайте ввод в NASM и сохраните его целиком в переменную
- 10. Прочитайте изображения из подпапок и сохраните их в другой папке
- 11. прочитайте из файла, разделите строку и сохраните в массиве JAVA
- 12. Прочитайте последний вывод консоли и сохраните его в переменной/строке
- 13. Прочитайте переменные из файла и сохраните их в structs - C
- 14. прочитайте массивList и сохраните его в файле Java
- 15. Прочитайте файлы из папки и сохраните их в вектор строк
- 16. Прочитайте один столбец CSV и сохраните его в массиве
- 17. прочитайте и сохраните данные SQL для использования за пределами класса
- 18. Прочитайте вторую строку и сохраните ее с txt C#
- 19. Прочитайте веб-страницу и сохраните строку без использования libcurl. (C++)
- 20. Hadoop mapreduce design/Маршрутизатор и редуктор на одной задаче
- 21. COBOL: прочитайте INPUT от SYSIN и сохраните до переменной
- 22. Прочитайте jpg, отредактируйте пиксель и сохраните без потерь
- 23. Сохраните предыдущее значение и отметьте новое значение
- 24. Загрузите файл, сохраните его и прочитайте снова -> Ошибка
- 25. Сложное выражение SSRS (среднее значение)
- 26. Как изменить значение в задаче
- 27. Automapper, сложное свойство и наследование
- 28. Сохраните значение в памяти и получите его
- 29. Подсчитайте и сохраните значение в xcode
- 30. Сохраните длину и значение строки в байт
Я сам не пробовал, но вы могли бы написать свой вывод в файл последовательности, тогда вам не нужны конверсии. Возможно, кто-то еще сможет это сделать. Это может заставить вас начать. http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/SequenceFileOutputFormat.html – DDW