我有一个使用livy提交作业的应用程序。在同一轮补习中,提交了各种作业。有时这些作业可能正在类似的数据集上工作,因此我想将数据从一个作业重用到另一个作业。我正在将数据集缓存在提交的作业中。但是,每当提交新作业时,它都不会获取缓存的数据集,而是会重新缓存相同的数据。
缓存数据集是否取决于变量? 例如,如果我这样做
var d1 = //make some dataset
d1.cache
以及其他后续工作
var d2 = //same dataset
d2.cache
我可以期望只有一个缓存的数据集,而d2使用以前缓存的数据吗?目前,我在spark应用程序的“存储”部分中看到单独的缓存数据。 作为参考,我正在使用Livy编程API: here用于提交我的工作。
答案 0 :(得分:1)
d1和d2都将创建为内存中两个不同的数据帧/数据集。您不能期望它们是相同的,因为它们是两个不同的对象。第二件事是,Cache()方法是Spark中的一种转换,它不一定会在执行语句后立即缓存对象。只有在稍后阶段显示一个动作(例如收集,计数)时,整个DAG才会被解析,并且缓存将被触发。