我正试图通过在Linux上使用mutlicore plan来加快我的R代码的运行速度。在将来的定义中,我将创建一个java对象并尝试将其传递给.jcall(),但是将来我将为java对象获取一个空值。有人能帮我解决这个问题吗?以下是示例代码-
library("future")
plan(multicore)
library(rJava)
.jinit()
# preprocess is a user defined function
my_value <- preprocess(a = value){
# some preprocessing task here
# time consuming statistical analysis here
return(lreturn) # return a list of 3 components
}
obj=.jnew("java.custom.class")
f <- future({
.jcall(obj, "V", "CustomJavaMethod", my_value)
})
基本上,我正在处理大量的流数据。在上面的代码中,我将流数据字符串发送到用户定义的函数进行统计分析,并返回3个组件的列表。然后希望使用自定义java方法CustomJavaMethod将此列表发送到自定义Java类java.custom.class进行进一步处理。在不使用future的情况下,我的代码运行良好。但是我在一分钟内得到了12个流记录,然后我的代码变得很慢,观察到处理延迟。
目前我使用的是16核的Unix。在使用未来包之后,我的过程完成得很快。我已经回溯了我的代码,在.jcall中发生了一些错误。
希望这能澄清我的痛苦。
发布于 2018-04-25 02:14:26
问题中的代码调用未知的Method1
方法,my_value
是未定义的,...很难知道你真正想实现的是什么。
看看下面的例子,也许你能从中得到启发:
library(future)
plan(multicore)
library(rJava)
.jinit()
end = .jnew("java/lang/String", " World!")
f <- future({
start = .jnew("java/lang/String", "Hello")
.jcall(start, "Ljava/lang/String;", "concat", end)
})
value(f)
[1] "Hello World!"
https://stackoverflow.com/questions/49979079
复制相似问题