Я подаю искр (искра-подать).Автоматически запускает кеширование rdds?
Проблема
я загружаю РДУ, читая Avro файлы с HDFS.
Затем я фильтрую 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());
Когда я смотрю на информацию рдд отладки для первого подсчета:
.....
.....
| 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 бы некоторые ловли информацию, связанную с ней в строке отладки ...
Однако, я понимаю, что в обоих случаях РДД называют NewHadoopRDD[0]
. Что такое [0]
В этом контексте означает, что идентификатор? Я думаю, что у RDD есть дескриптор, поэтому я не уверен, что значило бы повторное использование одного и того же дескриптора?
Когда я первый count
я вижу в журналах:
FileInputFormat: Total input paths to process : 60
Но я не вижу подобный журнал для второго счета. Не следует ли загружать records
Rdd снова?
Наконец второй отсчет быстрее, чем первый, который заставляет меня верить, что данные находятся в памяти ...
А интересно! так ведь на самом деле он читает данные снова и снова? – hba
yep, если вы не вызвали RDD.cache вручную. – zsxwing