我已经看到了一些集成R和Hadoop的选项,例如:RHadoop,RHipe,Hadoop Sreaming,RHive。
我在R中没有任何经验,但我在Hadoop中确实有很好的经验。我所说的方法可能是不可行的或其他东西......
但是任何人都可以分享他们对这种方法的看法吗——
我们可以使用 JRI集成 R 和 Hadoop 吗:因为 R 函数可以从 java 代码(使用 JRI)调用。我们可以做这样的事情吗:用Java编写一个Hadoop MapReduce程序,如果我们需要一些R中存在的功能,那么在Java Mapreduce程序中调用R-Function?
要使其正常工作,请遵循以下步骤:
- 在每个数据节点上安装 R with rJava。
- 在map/reduce作业的设置函数中,使用初始化R
法典:
private String[] Rargs = { "--vanilla" };
private Rengine re = null;
private REXP rn = null;
re = new Rengine(Rargs, false, null);
- 然后在实际映射中调用 R 或使用 Reduce 代码
法典:
rn = re.eval("result<-"Hello world"");
if( rn != null ){
System.out.println("Result is :"+rn.toString());
}
- 最后,要运行,请使用如下内容:
法典:
hadoop jar HelloWorld.jar com.example.HelloWorld -files libjri.so,libR.so,libRblas.so -libjars JRI.jar -Dmapred.child.env="R_HOME=/usr/lib64/R"
您可以在 -files 参数中包含更多文件,如 R 文件、数据文件等,以逗号分隔,它将被传送到分布式缓存。确保使用 re.eval("sapply("file.R",source)");
访问文件中的函数。来自爪哇的 R