java—在2个Dataframe中缓存同一个表两次

mbskvtky  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(472)

我已经将一个配置单元表缓存到spark中的Dataframe中。
使用计时器,我在2小时后再次安排缓存,并存储到不同的Dataframe中。但这一次,缓存没有像我预期的那样工作。它似乎没有缓存表,因为我正在监视日志和可用的空闲ram。
我有一个指向缓存数据的静态变量dataframe。现在,2小时后,我想刷新缓存,然后将该变量指向这个新缓存,然后取消旧缓存的持久化。如果第二次缓存失败,我不会重新发布。
下面是我的代码。实际上,代码是用java编写的,因此它是dataset而不是dataframe。

private static Dataset<Row> dataset;
..
..
public void cacheDataset(SparkSession spark){

        String query = "select * from database.table";

        Dataset<Row> localDataset = spark.sql(query);
        localDataset.cache();

        long count = localDataset.count();
        System.out.println("Dataset is Cached. Count = " + count);

        Dataset<Row> previousDataset = dataset;

        this.dataset = localDataset;

        System.out.println("\n\nStarting to unpersist a dataset\n\n");
        try{
            previousDataset.unpersist();
        }catch (NullPointerException e){
            System.out.println("Received Null pointer Exception. It means it was the first caching");
        }

        System.out.println("\n\nUnpersisting completed\n\n");

    }

如何将同一个表再次缓存到不同的dataset/dataframe中(我可以在这里使用一段时间的两倍内存),然后将变量重新指向新的缓存集,然后删除旧的缓存以释放内存。

xghobddn

xghobddn1#

你没有缓存previousdataset,你缓存了localdataset。将previousdataset视为应用了标识转换的新数据集。如果您尝试取消持久化localdataset,它应该可以工作。

相关问题