我有一个托管在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应用程序中?
如果您有任何想法,请与我们联系。
答案 0 :(得分:7)
我将从R的角度回答这个问题。 一般来说,你将面临两个问题:
1)与R接口,无论它在哪里运行
2)从Heroku那里做这件事,那里有一系列特殊的挑战。
对于第一种方法有一些通用的方法 - 你可以使用绑定到R(rsruby
,rinruby
等),你可以向R外壳(例如,来自ruby
),您可以将R作为Web服务访问(请参阅R -e "RCODEHERE"
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访问它。