簡體   English   中英

如果僅重復使用兩次,是否需要緩存數據集?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM