2016-03-16 2 views
0

Недавно один работодатель задал мне вопрос, как мы можем предотвратить ленивость преобразования Apache Spark. Я знаю, что мы можем сохранять и кэшировать набор данных RDD, но в случае сбоя он перечитывается из родителя.Можем ли мы предотвратить ленивость преобразования Apache Spark?

Может кто-нибудь, пожалуйста, объясните мне, есть ли какая-либо функция, чтобы остановить лень преобразования искры?

ответ

0

Конструктивно Спарк преобразования ленивы, и вы должны использовать действие для того, чтобы восстановить конкретное значение из них.

Например, следующие преобразования всегда будут оставаться ленивыми:

JavaRDD<String> lines = sc.textFile("data.txt"); 
JavaRDD<Integer> lineLengths = lines.map(s -> s.length()); 

функции как map возвратного РД, и вы можете включить только те РДУ в реальные ценности выполнения действий, такие как reduce:

int totalLength = lineLengths.reduce((a, b) -> a + b); 

Нет знака, который сделает map, чтобы получить конкретное значение (например, список целых чисел).

Суть заключается в том, что вы можете использовать collect или любые другие искровые действия для «предотвращений лени» о трансформации:

JavaRDD<String> lines = sc.textFile("data.txt"); 
JavaRDD<Integer> lineLengths = lines.map(s -> s.length()); 
List<Integer> collectedLengths = lineLengths.collect() 

Помните, однако, использование collect на большом наборе данных, вероятно, будет очень плохая практика, из-за чего у вашего драйвера закончилась нехватка памяти.

+1

Отличный ответ. Это означает, что мы не могли предотвратить лени от преобразования искры до тех пор, пока не будет вызвано действие. – Souvik

+0

Спасибо, пожалуйста, отметьте его как ответ (зеленый V) – imriqwe

Смежные вопросы