我在数据集中缓存了一个配置单元表(java中的数据集,scala中的Dataframe)。
我要定期刷新此数据集。但当我再次触发缓存时,它会说:
Asked to cache already cached data.
因此它不会缓存它。我想将这些数据强制缓存到另一个数据集中。
另外,我无法取消先前缓存数据的持久性,因为我无法使缓存数据在第二次缓存发生时不可用。当两个缓存都存在的时候,我对双重内存消耗很满意。一旦第二个完成,我将取消第一个。
下面添加一些代码供参考:
private static Dataset<Row> primaryDataset;
private static Dataset<Row> secondaryDataset;
private static boolean primaryInd = false;
...
...
public void cacheDataset(SparkSession spark){
String query = "select * from db.table";
if(primaryInd){
secondaryDataset = spark.sql(query);
secondaryDataset.cache();
long count = secondaryDataset.count();
logger.info(">>> Dataset is Cached. Count = " + count);
primaryInd = false;
primaryDataset.unpersist();
}else {
primaryDataset = spark.sql(query);
primaryDataset.cache();
long count = primaryDataset.count();
logger.info(">>> Dataset is Cached. Count = " + count);
primaryInd = true;
try {
secondaryDataset.unpersist();
}catch (NullPointerException nullPointerException){
logger.info(">>> Null Pointer exception while unpersisting. Could be the first caching.");
}
}
}
暂无答案!
目前还没有任何答案,快来回答吧!