开发者社区> 问答> 正文

spark - 持续存在两次RDD过程

我制作了一个RDD并从原点创建了另一个RDD,如下所示。

val RDD2 = RDD1.map({
println("RDD1")
....
}).persist(StorageLevel.MEMORY_AND_DISK)

RDD2.foreach({
println("RDD2")
...
})
...so on..
我期望RDD1的进程只进行一次,因为RDD1通过persist方法保存在内存或磁盘上。

但不知何故,“RDD1”打印在“RDD2”之后,如下所示。

RDD1
RDD1
RDD1
RDD1
RDD2
RDD2
RDD2
RDD2
RDD2
RDD1 -- repeat RDD1 process. WHY?
RDD1
RDD1
RDD1
RDD2
RDD2
RDD2
RDD2
RDD2

展开
收起
社区小助手 2018-12-12 10:59:09 2600 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    这是Spark的预期行为。即使您为第一个RDD添加持久性,spark也不会缓存数据,除非您在持久操作之后添加任何操作。map操作不是spark中的动作。

    强制执行缓存的方法是count在持久化之后添加操作RDD2

    val RDD2 = RDD1.map({
    println("RDD1")
    ....
    }).persist(StorageLevel.MEMORY_AND_DISK)

    RDD2.count // Forces the caching
    现在,如果您执行任何其他操作,则不会重新计算RDD2

    2019-07-17 23:20:01
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载