Вопрос

Я хочу использовать Mahout с улей, я получу данные от улей и используете модель данных Некоторые вещи, как для заполнения данных и использовать Mahout для рекомендации.Это возможно.Потому что я видел, как Mahout работает только для файлов.1) Как загрузить данные в Mahout, используя таблицу Hive?2) Есть ли другой способ, которым я могу использовать рекомендацию Mahout с улей или другими?

Здесь я имеющую результат улья JDBC, я хочу заполнить до Datamodel в Mahout.Как заполнить?

Я хочу использовать результат базы данных вместо чтения из файла для рекомендации Mahout. Например:

улей:

    import java.sql.SQLException;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.sql.DriverManager;

    public class HiveJdbcClient {
      private static String driverName = "org.apache.hive.jdbc.HiveDriver";

      /**
       * @param args
       * @throws SQLException
       */
      public static void main(String[] args) throws SQLException {
          try {
          Class.forName(driverName);
        } catch (ClassNotFoundException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          System.exit(1);
        }
        //replace "hive" here with the name of the user the queries should run as
        Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "hive", "");
        Statement stmt = con.createStatement();
        String tableName = "testHiveDriverTable";
        stmt.execute("drop table if exists " + tableName);
        stmt.execute("create table " + tableName + " (key int, value string)");
        // show tables
        String sql = "show tables '" + tableName + "'";
        System.out.println("Running: " + sql);
        ResultSet res = stmt.executeQuery(sql);
        if (res.next()) {
          System.out.println(res.getString(1));
        }
           // describe table
        sql = "describe " + tableName;
        System.out.println("Running: " + sql);
        res = stmt.executeQuery(sql);
        while (res.next()) {
          System.out.println(res.getString(1) + "\t" + res.getString(2));
        }

        // load data into table
        // NOTE: filepath has to be local to the hive server
        // NOTE: /tmp/a.txt is a ctrl-A separated file with two fields per line
        String filepath = "/tmp/a.txt";
        sql = "load data local inpath '" + filepath + "' into table " + tableName;
        System.out.println("Running: " + sql);
        stmt.execute(sql);

        // select * query
        sql = "select * from " + tableName;
        System.out.println("Running: " + sql);
        res = stmt.executeQuery(sql);
        while (res.next()) {
          System.out.println(String.valueOf(res.getInt(1)) + "\t" + res.getString(2));
        }

        // regular hive query
        sql = "select count(1) from " + tableName;
        System.out.println("Running: " + sql);
        res = stmt.executeQuery(sql);
        while (res.next()) {
          System.out.println(res.getString(1));
        }
      }
    }
.

mahout:

// Create a data source from the CSV file
File userPreferencesFile = new File("data/dataset1.csv");
DataModel dataModel = new FileDataModel(userPreferencesFile);

UserSimilarity userSimilarity = new PearsonCorrelationSimilarity(dataModel);
UserNeighborhood userNeighborhood = new NearestNUserNeighborhood(2, userSimilarity, dataModel);

// Create a generic user based recommender with the dataModel, the userNeighborhood and the userSimilarity
Recommender genericRecommender =  new GenericUserBasedRecommender(dataModel, userNeighborhood, userSimilarity);

// Recommend 5 items for each user
for (LongPrimitiveIterator iterator = dataModel.getUserIDs(); iterator.hasNext();)
{
    long userId = iterator.nextLong();

    // Generate a list of 5 recommendations for the user
    List<RecommendedItem> itemRecommendations = genericRecommender.recommend(userId, 5);

    System.out.format("User Id: %d%n", userId);

    if (itemRecommendations.isEmpty())
    {`enter code here
        System.out.println("No recommendations for this user.");
    }
    else
    {
        // Display the list of recommendations
        for (RecommendedItem recommendedItem : itemRecommendations)
        {
            System.out.format("Recommened Item Id %d. Strength of the preference: %f%n", recommendedItem.getItemID(), recommendedItem.getValue());
        }
    }
 }
.
Это было полезно?

Решение

Mahout Версия 0.9 предоставляет модель данных (исходные данные) для баз данных жалоб данных JDBC, таких как MySQL / Oracle / Postgress и т. Д., Базы данных NoSQL, такие как Mongodb / HBase / Cassandra и файловая система, основанные на основании.

По состоянию на этот релиз, уLIVE не является 100% стандартной базой данных SQL, модель данных MySQLJDBCDATAMODEL и SQL92JDBCDATAMODEL не подходит для использования таблиц улей в качестве SQL Синтаксис совершенно отличается в базах данных жалоб JDBC.

Для вашего первого вопроса вы можете продлить Anfeljdbcdatamodel и переопределите конструктор, чтобы пройти в DataSource Hive и SQL SQL Предпочтение, то время предпочтения, пользователь, все пользователи и т. Д., Аналогичны тем, что упомянуто в конструкторе AndelljDBCDatamodel.

Для вашего второго вопроса вышеуказанный метод удерживается хорошим, если вы используете нераспределенный алгоритм (вкусовые алгоритмы). Если используется распределенный алгоритм, Mahout может работать на файлах Hadoop Sorking HDFS, которые поддерживаются таблицей Hive. Пожалуйста, смотрите Здесь на запуске mahout на hadoop

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top