Извлечение содержимого из объекта Hadoop Text - PullRequest
0 голосов
/ 16 августа 2011

Я работаю с большим текстом внутри объекта Text из библиотеки Java Hadoop (0.20.203.0).Мне нужно извлечь из него содержимое XML без преобразования всего объекта в строку Java (с помощью .toString ()).

Может кто-нибудь привести пример того, как это сделать?

Читая документацию (http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/io/Text.html), я предполагаю, что мне нужно будет использовать функции .decode ().

Text t = "....<content>secret</content>...."
int start = t.find("<content>");
int end = t.find("</content>", start);
t.decode(String.getBytes(), start+7, end);

Я не понимаю, как использовать первый параметр функцииВпрочем.

Ответы [ 2 ]

0 голосов
/ 07 октября 2011

Кстати, я мог бы найти решение конкретной проблемы анализа содержимого между двумя тегами XML :

int start = t.find("<content>", 0);
int end = t.find("</content>", start);
int advance = "<content>".length();

try {
  content = Text.decode(t.getBytes(), start+advance, end-start-advance);
} catch (IOException e) {
  System.out.println("IOException was " + e.getMessage());
}

Последний параметр - это длина содержимого для извлечения, а не его конечная позиция (что было ошибкой в ​​первоначальном сообщении).

0 голосов
/ 16 августа 2011

Ваш код выглядит в основном правильно. Первый параметр decode - это байтовый массив, из которого вы хотите создать строку.

Из документов:

public static String decode(byte[] utf8, int start, int length) 

Он говорит utf8 только для того, чтобы сказать, что он ожидает, что ваш байтовый буфер будет в формате UTF-8 (который Text использует по умолчанию). Итак, ваш код будет:

Text.decode(t.getBytes(), start+7, end);

, поскольку decode является статической функцией. Кроме того, если посмотреть на источник для Text, это не должно увеличить ваш объем памяти, поскольку getBytes() возвращает ссылку на базовый байтовый массив, который содержит объект Text.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...