簡體   English   中英

Spark會自動緩存rdds嗎?

[英]Does spark cache rdds automatically?

我正在提交火花作業(火花提交)。

問題

我正在通過從HDFS讀取avro文件來加載rdd。
然后我過濾rdd並計數(job-1)。
然后,我再次使用其他條件對其進行過濾並進行計數(職位2)。

  • 在日志中,我看到FileInputFormat第一次讀取60個文件。 但是它第二次不讀取任何文件。
  • 另外,當我執行rdd.toDebugString時,看不到父rdd被緩存。

細節

這是代碼:

JavaRdd<Record> records = loadAllRecords();
JavaRDD<Record> type1Recs = records.filter(selectType1());
JavaRDD<Record> type2Recs = records.filter(selectType2());
log.info(type1Recs.count());
log.info(type2Recs.count());

當我查看第一個計數的rdd調試信息時:

  .....
  .....
  |   MapPartitionsRDD[2] at filter at xxxx.java:61 []
  |   NewHadoopRDD[0] at newAPIHadoopRDD at xxxxx.java:64 []

當我查看第二個計數的rdd調試信息時:

  .....
  .....
  |   MapPartitionsRDD[5] at filter at EventRepo.java:61 []
  |   NewHadoopRDD[0] at newAPIHadoopRDD at xxxxx.java:64 [] 

如果我正在捕獲NewHadoopRDD,則在調試字符串中會有一些與其相關的捕獲信息...

但是,我確實意識到在兩種情況下RDD都稱為NewHadoopRDD[0] 在這種情況下, [0]是什么意思是id? 我認為RDD有一個句柄,所以我不確定重用同一句柄的意義是什么?

當我進行第一次count我會在日志中看到:

FileInputFormat: Total input paths to process : 60

但是,第二個計數我沒有看到類似的日志。 records Rdd是否應該重新重新加載?

最后,第二個計數比第一個計數快,這使我相信數據在內存中。

對於此行, FileInputFormat: Total input paths to process : 60 ,它屬於RDD的元數據。 此輸出在NewHadoopRDD.getPartitions 它很懶,但是只能運行一次。 您可以說RDD的元數據已緩存。 但是不會緩存此RDD的數據(文件中的數據)。

Spark會自動緩存rdds嗎?

有時候是。 隨機播放時,RDD會自動緩存。

例如,您可能已經在spark Web UI中觀察到“跳過的階段”。

請參閱: https//spark.apache.org/docs/1.5.0/programming-guide.html#shuffle-operations

在其他情況下,您將需要調用rdd.cache或其變體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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