我看到了一些集成 R 和 hadoop 的选项,例如:RHadoop、RHipe、Hadoop Sreaming、RHive。
我没有任何 R 经验,但我在 Hadoop 方面有很好的经验。我正在谈论的方法可能不可行或其他......
但是任何人都可以分享他们对这种方法的看法 -
我们可以使用 JRI 集成 R 和 Hadoop 吗:因为可以从 java 代码(使用 JRI)调用 R 函数。? 我们可以做这样的事情:用 Java 编写一个 hadoop mapreduce 程序,如果我们需要 R 中存在的一些功能,然后在 Java Mapreduce 程序中调用该 R 函数吗?
最佳答案
实现此功能所需遵循的步骤是:
- 在每个数据节点上安装 R 和 rJava。
- 在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"
您可以在 -files 参数中包含更多文件,如 R 文件、数据文件等,以逗号分隔,它将被发送到分布式缓存。
确保使用 re.eval("sapply(\"file.R\",source)");
从 Java 访问 file.R 中的函数
关于java - 集成 R 和 Hadoop(使用 JRI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14601421/