首页 > 解决方案 > 强制缓存已缓存的数据集 spark

问题描述

我在数据集中缓存了一个配置单元表(Java 中的 Dataset<Row>,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.");
        }

    }

}

标签: javascalaapache-sparkcachingapache-spark-sql

解决方案


推荐阅读