Heroku Rails应用程序的数据挖掘/统计分析选项?

时间:2011-09-25 16:06:22

标签: ruby ruby-on-rails-3 r heroku stata

我有一个托管在Heroku上的rails应用程序,我想要合并一些实时数据分析。理想情况下,我想找出一种运行广义增强回归模型的方法,我知道这两种模型都可用于R(http://cran.r-project.org/web/packages/gbm/index.html)和Stata(http://www.stata-journal.com/article.html?article=st0087)。我想保存生成的gbm树,然后在我的应用程序中,使用它根据用户输入预测新结果。

如果那是不可能的,我会愿意使用其他数据挖掘算法。对我来说最重要的是能够将它集成到我的Heroku应用程序中,以便它可以在没有本地机器的情况下运行。

我已经研究过的选项:

1)Heroku支持建议将R库存放到红宝石中。我对红宝石和铁轨比较陌生,这对我来说是可行的。我四处寻找有关在宝石中销售图书馆的说明,但是找不到太多。

2)这里的另一个帖子(http://stackoverflow.com/questions/6495232/statistic-engine-that-work-with-heroku)提到了CloudNumbers,但似乎无法从Rails调用该服务应用

3)在他们的一个案例研究中,Heroku提到了FlightCaster,它使用Clojure,Hadoop和EC2进行机器学习(http://www.infoq.com/articles/flightcaster-clojure-rails)。我看到Heroku支持Clojure,但有没有办法将它(或更具体的Incanter)集成到我的Rails应用程序中?

如果您有任何想法,请与我们联系。

1 个答案:

答案 0 :(得分:7)

我将从R的角度回答这个问题。 一般来说,你将面临两个问题:

1)与R接口,无论它在哪里运行

2)从Heroku那里做这件事,那里有一系列特殊的挑战。

对于第一种方法有一些通用的方法 - 你可以使用绑定到R(rsrubyrinruby等),你可以向R外壳(例如,来自ruby R -e "RCODEHERE"),您可以将R作为Web服务访问(请参阅R -e "RCODEHERE"包,特别是https://github.com/jeffreyhorner/rRack/blob/master/Rook/inst/exampleApps/RJSONIO.R),或者您可以使用Rook之类的内容手动访问R

其中,如果您只是进行一次操作并且不太关注性能,那么对R进行外壳是最简单的事情。您需要解析返回的输出,但这是我单次操作体验中最快的方式。

对于更重要的用法,我建议使用其中一个绑定,或者将R设置为另一个Heroku应用程序上的Web服务并通过HTTP调用它。

接下来的挑战是让R在Heroku上运行 - 它不是标准环境的一部分,它是一个没有root访问权限的只读文件系统,所以你不能只做rserve

有可能让R成为宝石 - 有人已经开始在https://github.com/deet-uc/rsruby-heroku执行此操作,但我个人无法让它工作。也可以通过安装所有依赖项等直接在Heroku上构建R - 这是我在https://github.com/noahhl/rookonheroku采取的方法(如果你不使用Rook,那么你需要的第1步) 。

请注意,Heroku可能不允许您在与Rails应用程序相同的线程中启动第二个进程,这是大多数绑定所做的。这可能使得这些绑定工作变得相当困难,这就是为什么我倾向于对R进行shell,或者将其暴露为Web服务并通过HTTP访问它。