集成R和Hadoop(使用JRI)

时间:2013-01-30 10:13:05

标签: java r hadoop mapreduce rjava

我已经看到了integra R和hadoop的一些选项:RHadoop,RHipe,Hadoop Sreaming,RHive。

我在R中没有任何经验,但我在Hadoop中确实有很好的exp。我所谈论的方法可能是不可行的或别的......

但是,任何人都可以分享他们对这种方法的看法 -

我们可以使用JRI集成R和Hadoop:因为可以从java代码调用R函数(使用JRI)。 我们可以这样做:用Java编写hadoop mapreduce程序,如果我们需要R中存在的某些功能,那么在Java Mapreduce程序中调用该R-Function?

1 个答案:

答案 0 :(得分:2)

要使其发挥作用的步骤如下:

  • 在每个数据节点上使用rJava安装R.
  • 在map / reduce作业的设置功能中,使用
  • 初始化R.

代码:

private String[] Rargs = { "--vanilla" };

private Rengine re = null;
private REXP rn = null;
re = new Rengine(Rargs, false, null);
  • 然后在实际地图中调用R或使用
  • 减少代码

代码:

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"

您可以在-mailes参数中包含更多文件,如R文件,数据文件等,这些文件由逗号分隔,然后将传送到分布式缓存。 确保使用re.eval("sapply(\"file.R\",source)");访问来自Java的文件.R中的函数