Преобразования Spark + Scala, неизменность и потребление памяти

Я просмотрел несколько видео на Youtubeискра архитектура.

Несмотря на то, что ленивая оценка, устойчивость создания данных в случае сбоев, хорошие концепции функционального программирования являются причинами успеха распределенных наборов данных Resilenace, одним из факторов, вызывающих беспокойство, является нехватка памяти из-за множествапреобразования приводя к накладным расходам памяти из-за неизменности данных.

Если я правильно понимаю эту концепцию, Каждое преобразование создает новые наборы данных, и, следовательно, требования к памяти уйдут к этому много раз. Если я использую в своем коде 10 преобразований, будет создано 10 наборов данных, и потребление памяти увеличится в 10 раз.

например

val textFile = sc.textFile("hdfs://...")
val counts = textFile.flatMap(line => line.split(" "))
                 .map(word => (word, 1))
                 .reduceByKey(_ + _)
counts.saveAsTextFile("hdfs://...")

Приведенный выше пример имеет три преобразования:flatMap, map and reduceByKey, Означает ли это, что мне нужно 3X памяти данных для размера X данных?

Правильно ли мое понимание? Является ли кэширование RDD единственным решением для решения этой проблемы?

Как только я начинаю кешировать, он может перетекать на диск из-за большого размера, а производительность будет зависеть от операций ввода-вывода на диске. В таком случае производительность Hadoop и Spark сопоставима?

РЕДАКТИРОВАТЬ:

Из ответа и комментариев я понял ленивую инициализацию и процесс конвейера. Мое предположение о 3 X памяти, где X является исходным размером RDD, не является точным.

Но возможно ли кешировать 1 X RDD в памяти и обновлять его по пиплайну? Как работает cache ()?

Ответы на вопрос(2)

Ваш ответ на вопрос