我正在提交一個spark工作(spark-submit)。是否會自動啓動緩存rdds?
問題
我加載由HDFS讀取的Avro文件的RDD。
然後我過濾rdd &數它(作業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作爲稱。 [0]
這個意思是說在這個上下文中的id是什麼?我認爲RDD有句柄,所以我不確定重複使用同一個句柄的意義是什麼?
當我做的第一count
我在日誌中看到:
FileInputFormat: Total input paths to process : 60
但我沒有看到一個類似的日誌第二計數。 records
Rdd不應該重新加載嗎?
最後第二計數大於這使我相信數據是內存中的第一快...
啊有趣!所以實際上它重新讀取數據呢? – hba
是的,除非你手動調用RDD.cache。 – zsxwing