事实上,单是这段代码就不会执行任何
spark.time
总之,map函数是懒惰的,因此在执行
RDD
. 你也应该考虑,如果你不坚持你的转变
RDD
它将重新计算每个操作的所有转换。这意味着如果你在做这样的事情:
val urls = spark.sparkContext.parallelize(Seq("url1", "url2", "url3"))
//for each API call,execute them in different executor and collate data
val actual_data = urls.map(x => spark.time(HTTPRequestParallel.ds(x)))
val c = actual_data.count()
actual_data.collect()
将有6次执行
map
(每个元素两个
RDD
,第一个
count
第二个是
collect
)为了避免这种重新计算,可以缓存或保持
RDD
如下
val urls = spark.sparkContext.parallelize(Seq("url1", "url2", "url3"))
//for each API call,execute them in different executor and collate data
val actual_data = urls.map(x => spark.time(HTTPRequestParallel.ds(x))).cache()
val c = actual_data.count()
actual_data.collect()
在第二个示例中,您将只看到3个日志,而不是6个