[英]Do I need to cache a Dataset if it is reused only twice?
我正在使用 Apache Spark,我有以下代碼:
Dataset<Row> tradesDataset = sparkSession
.sql("select * from a_table")
.cache(); // <-- do I need caching here?
long countOfDistinctUitIdsInTradeAgreements = tradesDataset
.select(tradesDataset.col("uitid"))
.distinct()
.count();
long countOfDistinctUitIdsInTradeAgreementsForTradeDate = tradesDataset
.filter(tradesDataset.col("TRADE_DATE").equalTo(processingDate))
.count();
我 select 來自數據集的一列並對其進行計數。
所以我的問題是我是否需要緩存來自 select 的數據集? 它會帶來任何性能提升嗎?
查看您的示例,它可能在沒有緩存的情況下運行得更快
您在執行 select * from 之后進行緩存,因此您將讀取包含所有列的整個數據集並將其存儲在緩存中。
稍后您僅使用它來獲取您不需要整個數據集而只需要一列的計數。
如果沒有緩存,您將讀取源代碼兩次,這是正確的,但是 Spark 很可能會下推投影,並且會發現在這兩種情況下只應選擇一列,這意味着實際的 i/o 可能更小
當然,這可能取決於您正在閱讀的來源,所以我認為檢查這兩個選項並比較結果是值得的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.