[英]Does spark cache rdds automatically?
我正在提交火花作業(火花提交)。
問題
我正在通過從HDFS讀取avro文件來加載rdd。
然后我過濾rdd並計數(job-1)。
然后,我再次使用其他條件對其進行過濾並進行計數(職位2)。
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.