在使用spark附带的sparkr在r-4.0.2和spark3.0.1上运行下面的代码时,我不断得到“node stack overflow”错误。然而,这个精确的代码在r-3.3.3和spark2.2.1以及sparkr2.4.5上工作。
我通过运行 $SPARK_HOME/bin/sparkR
或者 sparkR.session
在r中(两者产生相同的误差)
代码不起作用
source('sample.R')
myclsr = myclosure_func()
myclsr$get_some_date('2021-01-01')
result = spark.lapply(c('2021-01-01', '2021-01-02'), function (rdate) {
source('sample.R')
another_closure = myclosure_func()
return(another_closure$get_some_date(rdate))
})
## spark.lapply throws node stack overflow
代码工作
## if i don't source sample.R before spark.lapply, this works
result = spark.lapply(c('2021-01-01', '2021-01-02'), function (rdate) {
source('sample.R')
another_closure = myclosure_func()
return(another_closure$get_some_date(rdate))
})
这是我的示例。r看起来像,请注意递归的用法:
## util function, which calls itself
getPreviousBusinessDate <- function(asofdate) {
asdt <- asofdate;
asdt <- as.Date(asofdate)-1;
wd <- format(as.Date(asdt),"%A")
if(wd == "Saturday" | wd == "Sunday") {
return (getPreviousBusinessDate(asdt));
}
return (asdt);
}
## closure which calls util function
myclosure_func = function() {
myclosure = list()
get_some_date = function (random_date) {
return (getPreviousBusinessDate(random_date))
}
myclosure$get_some_date = get_some_date
return(myclosure)
}
花了大量的时间阅读文档/论坛/q&A,但不明白为什么这会在以前的r/spark版本上起作用,但在r-4x/spark-3x上不起作用。任何见解都将受到高度赞赏和需要。
暂无答案!
目前还没有任何答案,快来回答吧!