如何强制Spark只执行一次转换?

时间:2019-05-20 05:06:38

标签: scala apache-spark

我有一个火花工作,可以随机采样我的输入数据。然后,我为输入数据生成一个布隆过滤器。最后,我应用过滤器并将数据与数据集A合并。

由于采样是随机的,因此只能执行一次。

但是即使我坚持执行两次。我可以在第一步的Spark DAG中看到绿色的缓存步骤,但是联接仍然从数据加载和随机采样开始。我还发现,当工作人员内存不足时,可以清除缓存的数据,这没想到。

这是我的代码:

// raw data is a RDD
val rawData = loadData("/path/to/data").filter(ramdomSampling).persist(StorageLevel.MEMORY_AND_DISK_SER)

val myFilter = getMyBloomFilter(rawData)

// apply bloom filter and join input data with dataset A
val dataWithA = appliyFilterAndJoin(loadData, myFilter)

即使工作人员没有足够的内存来缓存,如何强制Spark只执行某些转换?

谢谢!

1 个答案:

答案 0 :(得分:1)

尝试将采样的DAG写入输出(HDFS / S3或本地文件系统)。然后重新读取该输出以用于下一阶段。这样,您的采样步骤的输出将保持不变。