2

我已经看到了一些集成 R 和 hadoop 的选项,例如:RHadoop、RHipe、Hadoop Sreaming、RHive。

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

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

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

4

1 回答 1

2

完成这项工作的步骤是:

  • 在每个数据节点上安装 R 和 rJava。
  • 在 map/reduce 作业的 setup 函数中,使用初始化 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"

您可以在以逗号分隔的 -files 参数中包含更多文件,如 R 文件、数据文件等,它将被发送到分布式缓存。确保用于re.eval("sapply(\"file.R\",source)");从 Java 访问 file.R 中的函数

于 2013-06-11T21:01:59.897 回答