【发布时间】:2020-06-04 04:56:16
【问题描述】:
出于计时目的,我需要在执行函数之前强制缓存。
我最初的方法是使用 count() 操作,因为这将在所有分区中缓存 RDD,这与 take() 不同,但是在计算、通信或时间方面是否有更有效的方法来强制它?
// Load data, partition and mark to be cached
val data = sc.textFile("input.txt").map(_.toInt)
val partitioner = new RangePartitioner(16, data)
val partitioned_data = data.partitionBy(partitioner).cache()
// Force cache with count or something more efficient
partitioned_data.count()
// Do something
something(partitioned_data)
【问题讨论】:
-
不需要强制缓存,因为在调用动作时会自动触发缓存,在上述情况下计数。 Spark DAG 将根据转换和操作自动创建缓存数据的计划。
-
如果你真的想强制,只需触发一个动作。 IE。将其写入文件。
-
@hagarwal 我知道缓存是惰性的,因此只有在调用动作时才会触发,我的问题是我可以调用的最便宜的动作会触发缓存,有什么比
count()更好?
标签: scala apache-spark caching rdd