我有一个火花工作,可以随机采样我的输入数据。然后,我为输入数据生成一个布隆过滤器。最后,我应用过滤器并将数据与数据集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只执行某些转换?
谢谢!
答案 0 :(得分:1)
尝试将采样的DAG写入输出(HDFS / S3或本地文件系统)。然后重新读取该输出以用于下一阶段。这样,您的采样步骤的输出将保持不变。