我见过一些集成hadoop的选项,比如:rhadoop、rhipe、hadoopsreaming、rhive。我在r方面没有任何经验,但我在hadoop方面有很好的经验。我所说的方法可能是不可行的或其他的。。。。但有人能分享他们对这种方法的看法吗-我们能用jri集成r和hadoop吗:因为r函数可以从java代码中调用(用jri)。?我们是否可以这样做:用java编写hadoopmapreduce程序,如果我们需要r中的一些功能,那么在javamapreduce程序中调用r函数?
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中的函数
re.eval("sapply(\"file.R\",source)");
1条答案
按热度按时间j5fpnvbx1#
要使其正常工作,需要遵循以下步骤:
在每个数据节点上安装r和rjava。
在map/reduce作业的setup函数中,使用
代码:
然后调用实际Map中的r或使用
代码:
最后,要运行,请使用以下命令:
代码:
您可以在-files参数中包含更多的文件,如r文件、数据文件等,这些文件之间用逗号分隔,它将被传送到分布式缓存。一定要使用
re.eval("sapply(\"file.R\",source)");
从java访问file.r中的函数