#hadoop #mahout #mahout-recommender
#hadoop #mahout #mahout-рекомендатель
Вопрос:
Я хочу использовать eclipse для разработки своего проекта с mahout-0.9 и hadoop-2.2.0.
Я мог бы успешно запустить свой код с mahout-0.9. Но я столкнулся с проблемой, как я мог запустить свой проект с помощью hadoop mod? Я думаю, что мне нужно установить hadoop на свой компьютер и использовать command для его запуска. Тогда я мог бы запустить свой проект в eclipse с модом hadoop.
Поскольку Mahout может использоваться MAHOUT_LOCAL
для определения локального мода или мода hadoop в Linux. Но когда я устанавливаю для переменной среды MAHOUT_LOCAL
значение «», она также использует локальный мод, почему?
Если невозможно запустить mahout с hadoop в eclipse, как я могу запустить свой проект? Спасибо 🙂
Мой пример кода
package com.predictionmarketing.itemrecommend;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.recommender.GenericItemBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.UncenteredCosineSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
public class ItemRecommend {
public static void main(String[] args) {
try {
DataModel model = new FileDataModel(new File("data/test.txt"));
ItemSimilarity similarity = new UncenteredCosineSimilarity(model);
Recommender recommender = new GenericItemBasedRecommender(model, similarity);
List<RecommendedItem> recommendations = recommender.recommend(2, 10);
for(RecommendedItem recommendation : recommendations) {
System.out.println(recommendation.getItemID() "," recommendation.getValue());
}
} catch (IOException e) {
System.out.println("There was an error.");
e.printStackTrace();
} catch (TasteException e) {
System.out.println("There was a Taste Exception");
e.printStackTrace();
}
}
}
Комментарии:
1. ваш код здесь не включает никакого вызова класса Hadoop. для примера: «новый файл («data/test.txt «)» читается из локального файла, а не из HDFS
2. Как я мог читать из HDFS?? Спасибо
3. Ответ здесь может быть немного длинным, поэтому я советую вам взглянуть на это .
Ответ №1:
Ваш пример не является кодом Hadoop. Рекомендации Mahout представлены в версиях, отличных от hadoop «в памяти», как вы использовали в своем примере, и версиях Hadoop. Версия Hadoop имеет совершенно другой API, поскольку она вычисляет все рекомендации для всех пользователей и помещает их в файлы HDFS. Вы можете запустить версию Hadoop из командной строки на компьютере, который является клиентом Hadoop (знает, как взаимодействовать с кластером Hadoop). Доступ осуществляется путем ввода mahout recommenditembased
, и он распечатает экран справки.
После того, как вы запустите задание hadoop в кластере, вам нужно будет написать код для поиска ссылок для конкретного пользователя из этих файлов.
Это часто делается путем написания кода для хранения рекомендаций в базе данных и использования запросов для извлечения рекомендаций во время выполнения.
Комментарии:
1. Спасибо за ваше предложение! Это очень полезно! Не могли бы вы рассказать, как получить файлы, сохраненные в hdfs? Я думаю, что это может быть текстовый файл, хранящийся на моем компьютере, если я хочу получить результат, как я могу это сделать? Спасибо!
2. Они будут в файлах последовательности HDFS. «Ключом» для каждой строки будет идентификатор пользователя mahout (целое число), значение будет RecommendedItems, насколько я помню, поэтому значение представляет собой список рекомендуемых элементов с весами. Запустите
mahout seqdumper -i one-of-the-part-files | more
, чтобы получить представление о данных и о том, что такое classname ключа и значения.