集成r和hadoop(使用jri)

rkttyhzu  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(378)

我见过一些集成hadoop的选项,比如:rhadoop、rhipe、hadoopsreaming、rhive。
我在r方面没有任何经验,但我在hadoop方面有很好的经验。我所说的方法可能是不可行的或其他的。。。。
但有人能分享他们对这种方法的看法吗-
我们能用jri集成r和hadoop吗:因为r函数可以从java代码中调用(用jri)。?我们是否可以这样做:用java编写hadoopmapreduce程序,如果我们需要r中的一些功能,那么在javamapreduce程序中调用r函数?

j5fpnvbx

j5fpnvbx1#

要使其正常工作,需要遵循以下步骤:
在每个数据节点上安装r和rjava。
在map/reduce作业的setup函数中,使用
代码:

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

private Rengine re = null;
private REXP rn = null;
re = new Rengine(Rargs, false, null);

然后调用实际Map中的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中的函数

相关问题