【问题标题】:Integrating R and Hadoop (using JRI)集成 R 和 Hadoop(使用 JRI)
【发布时间】:2013-01-30 10:13:05
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我相信这可能是免费使用 R + hadoop 的唯一方法,而使用革命分析的另一种选择需要花钱。

标签: java r hadoop mapreduce rjava


【解决方案1】:

完成这项工作的步骤如下:

  • 在每个数据节点上安装 R 和 rJava。
  • 在map/reduce作业的setup函数中,使用初始化R

代码:

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

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

代码:

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 中的函数

【讨论】:

  • 性能怎么样?它会和流媒体一样还是更糟……有什么想法吗?
  • @user1158351 它应该比流式处理好一点,因为这些调用通过 JNI 在同一个进程中发生,而流式处理是不同的进程
猜你喜欢
  • 1970-01-01
  • 2016-07-14
  • 2011-06-15
  • 2011-12-12
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 2011-12-14
相关资源
最近更新 更多