【问题标题】:Integrating Java and R [closed]集成 Java 和 R [关闭]
【发布时间】:2012-12-12 10:45:09
【问题描述】:

我一直在寻找一些第三方 jar 来做一些高级的分析过程,比如 Java 中的 SQL 窗口函数,因为我们的数据库 mysql 不支持它。在谷歌的帮助下,我发现“R”虽然不是基于 java 的,但它可以解决我的大部分情况。我试过“RJava”和“Rcaller”接口来连接java。

对于性能、可扩展性和长期运行,这是在 Java 中连接 R 的最佳库。请多多指教。

【问题讨论】:

    标签: r rjava rserve rcaller


    【解决方案1】:

    假设“Java 中的 R”意味着从 Java 调用 R:JRI(rJava 的一部分)将 R 嵌入到 Java 中。这是最有效的方式,因为它是一个直接的 JNI 接口。 (有关已部署的示例,请参阅 JGR)。

    另一种选择是 Rserve,它是一个客户端/服务器概念。它有在系统之间序列化数据的缺点,但允许并行连接(在 unix 上),这在 JRI 中是不可能的,因为 R 是单线程的,因此每个 Java 进程只能在一个线程中运行。

    RCaller 是效率最低的,因为它只是调用 R 进程,因此存在冷启动问题(与 Rserve 相比)以及序列化效率较低。

    【讨论】:

    • 单线程架构是否也对 Rserve 施加了性能限制?可能你可以有多个连接,但 R 中的计算仍然需要在 R 世界中相同的时间?
    • 单独的 R 计算在 Rserve 中将花费与在 R 中一样多的时间(您可以在 R 中使用线程进行本机计算,但这是一个不同的问题)。多个连接的意义在于,您可以并行运行多个计算(例如运行并行 R 实例,只是没有初始成本),而当您嵌入 R 时,您无法做到这一点。我之所以提到它只是因为 Java 用户倾向于假设一切都在线程安全,因此他们可能会尝试创建多个 REngine 实例,这些实例适用于 Rserve 但不适用于 JRI。
    猜你喜欢
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2011-11-19
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    相关资源
    最近更新 更多