java - 强制缓存已缓存的数据集 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.");
}
}
}
解决方案
推荐阅读
- distributed-computing - 协调器失败时的两阶段提交阻塞
- node.js - TypeError:无法读取未定义 Angular SSR 的属性“indexOf”
- java - 如何在 Intellij 中显示分支覆盖率?
- azure - 预测期间的 Azure 表单识别器一般错误
- python - 从 python 中的嵌套 URL 中抓取和解析表
- php - 为什么 apache 会像文件夹或虚拟 url 一样获取文件 php?
- python - 限制一定数量的请求的scrapy蜘蛛
- flutter - 带有 StreamBuilder 错误的 Flutter AlertDialog
- python - 如何使用python在我的数据中获取一定范围的数字
- azure-devops - Azure DevOps - 测试运行管理,恢复运行结果