2013-12-02 1 views
1

У меня есть проект схожести документа с документом, который я работаю, и я застрял в какой-то части. Ситуация выглядит следующим образом (у меня есть термин документ таблицы индекса хранится в файле CSVПерекрестные заголовки продуктов и чтения в hadoop

"", t1, t2, t3, t4, ....


doc1, f11, f12, f13, f14, ....

doc2, f21, f22, f23, f24, ....

doc3, f31, f32, F33, F34, ....

.

.

.

где f12 означает частоту term2 (t2) в документа1 (doc1)

С другой стороны, у меня есть файл запрос содержит запросы, которые нужны искать их ближайшие или аналогичные документы

"", t1, t3, T122, T34, ....


q1, f11, f12, f13, f14, ....

q2, f21, f22, f23, f24 , ....

q3, f31, f32, f33, f34, ....

.

.

. , но здесь термины здесь могут содержать разные термины, поэтому мне нужно найти кросс-произведение этих двух (индекс терминов и запросов), чтобы найти расстояния между запросом и существующим документом

Проблема состоит из двух частей : first, как читать заголовки каждого из этих файлов csv для хранения их в каком-либо терминаторе, учитывая, что файл будет разделен на разные машины.

второй, как сделать декартово произведение на этих двух файлов, чтобы найти similartiy (создать новый документ, который может иметь все возможные условия (размеры) для того, чтобы найти сходство)

Я планирую написать некоторый алгоритм K-ближайшего соседа, чтобы найти сходство Какой инструмент или инструменты я должен использовать, Pig, Hive, Mahout.

ответ

1

есть отдельная глава по книге MapReduce Design Patterns о декартовом продукте с исходным кодом.

+0

Исходный код также доступен здесь: https://github.com/adamjshook/mapreducepatterns/tree/master/MRDP/src/main/java/mrdp/ch5 – vefthym

1

Да для ответа @vefthym, и я читал ту же главу в той же книге!

ОДНАКО, время работы невероятно длинное! По пути в книге, для наборов данных объемом 600 тыс. Бит, содержащих 20 000 записей, работа над декартовым продуктом занимает более 10 часов!Хотя я знаю за 20 000 записей, вычисление будет почти 200 м раз, а доступ ввода-вывода будет 400 м раз, что очень важно, я считаю нецелесообразным работать над большим набором данных, равным ГБ или ТБ.

Я связываюсь с автором, чтобы узнать, получил ли он ту же среду выполнения. Дадут вам знать, что вы знаете

+0

Получили ли вы ответ? – vefthym

+1

@vefthym Да и Нет. Я просмотрел примеры, упомянутые в книге. Тем не менее, существует некоторая грубая реализация кросс-продукта, использующего метод Block Nested Loop. Однако это поставило вопросы о том, что блок необходимо перенести в кластер, чтобы заказать для него другое перекрестное соединение блока, что накладывает большую нагрузку на сеть. Я пытаюсь Pig [link] (http://pig.apache.org), так как мне сказали, что Pig имеет некоторую оптимизацию в соединении с крестом. У меня был коллега, который использовал Pig для обработки некоторых данных, размер которых был таким же большим, как TB в течение нескольких часов. –

+0

Я использовал заблокированную вложенную петлю в Hadoop, и это очень практично, но немного медленнее. Тем не менее, вы можете найти хорошее приближение в этой статье (я не автор) http://www.cs.utah.edu/~lifeifei/papers/mrknnj.pdf – vefthym