首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Mahout推荐工作更快?

如何使Mahout推荐工作更快?
EN

Stack Overflow用户
提问于 2012-10-22 20:06:35
回答 1查看 1.3K关注 0票数 2

嗨,马赫特社区在苏!

我有几个关于加速推荐计算的问题。在我的服务器上,我没有Hadoop就安装了Mahout。另外,jRuby也用于推荐脚本。在数据库中,我有3k用户和100 k项(连接表中的270 k项)。因此,当用户请求推荐时,简单的脚本开始工作:

首先,它使用如下所示的PGPoolingDataSource建立db连接:

代码语言:javascript
复制
  connection = org.postgresql.ds.PGPoolingDataSource.new()
  connection.setDataSourceName("db_name");
  connection.setServerName("localhost")
  connection.setPortNumber(5432)
  connection.setDatabaseName("db_name")
  connection.setUser("mahout")
  connection.setPassword("password")
  connection.setMaxConnections(100)
  connection

我收到警告:

代码语言:javascript
复制
WARNING: You are not using ConnectionPoolDataSource. Make sure your DataSource pools connections to the database itself, or database performance will be severely reduced.

有什么办法解决这个问题吗?

在此之后,我提出以下建议:

代码语言:javascript
复制
model = PostgreSQLJDBCDataModel.new(
    connection,
    'stars',
    'user_id',
    'repo_id',
    'preference',
    'created_at'
  )

  similarity = TanimotoCoefficientSimilarity.new(model)
  neighborhood = NearestNUserNeighborhood.new(5, similarity, model)
  recommender = GenericBooleanPrefUserBasedRecommender.new(model, neighborhood, similarity)
  recommendations = recommender.recommend user_id, 30

目前,为一个用户生成推荐大约需要5-10秒。问题是如何更快地提出建议(200 is将很好)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-22 22:15:34

如果您知道您正在使用池数据源,则可以忽略该警告。这意味着该实现没有实现池实现的通常接口,即ConnectionPoolDataSource

如果试图直接从数据库上运行,就永远不会使它运行得很快。数据访问太多了。将JDBCDataModel封装在ReloadFromJDBCDataModel中,它将被缓存在内存中,这应该可以更快地工作100倍。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13018982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档