sparkr递归代码引发节点堆栈溢出

2vuwiymt  于 2021-07-12  发布在  Spark
关注(0)|答案(0)|浏览(209)

在使用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上不起作用。任何见解都将受到高度赞赏和需要。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题