在对RDD进行转换时,例如: -
firstRDD=spark.textFile("hdfs://...")
secondRDD=firstRDD.filter(someFunction);
thirdRDD = secondRDD.map(someFunction);
第一个,第二个和第三个RDD是将值存储在RAM中,还是当我们对result = thirdRDD.count()
这样的最终第三个RDD执行操作时,它会存储数据吗?
答案 0 :(得分:2)
在调用this.UserService.getUserInfo()
.map(user => `${user.firstName} ${user.lastName}`)
.subscribe(fullName => this.name = fullName)
之前,根本没有处理。
没有任何操作将任何数据存储在内存中,不包括count
所需的常量内存分配。
count
期间实现的行可以立即丢弃并收集垃圾。
答案 1 :(得分:0)
在任何情况下,只有在链中调用操作时,RDD才会加载值。在这种情况下,它只在执行计数操作时加载值,并且只加载数据,直到指定了“filter”函数内指定的条件。
它不会加载数据并将其保存在RAM中。它可以在一个RDD上调用方法持久化。否则,它将在下次操作任何操作时从头开始加载数据。
如果有帮助,请告诉我。