Как далеко будет искры Spark RDD?

Скажем, у меня есть три функции преобразования RDD, вызываемые на rdd1:

def rdd2 = rdd1.f1
def rdd3 = rdd2.f2
def rdd4 = rdd3.f3

Теперь я хочу кэшировать rdd4, поэтому я вызываю rdd4.cache().

Мой вопрос:

Будет ли кэшироваться только результат действия на rdd4 или будет ли кэширован каждый RDD выше rdd4? Скажем, я хочу кэшировать как rdd3, так и rdd4, нужно ли их кэшировать отдельно?

Ответ 1

Вся идея кеша заключается в том, что искра не сохраняет результаты в памяти, если вы не скажете об этом. Поэтому, если вы кэшируете последний RDD в цепочке, он сохраняет только результаты этого в памяти. Итак, да, вам нужно кэшировать их отдельно, но имейте в виду, что вам нужно только кэшировать RDD, если вы собираетесь использовать его более одного раза, например:

rdd4.cache()
val v1 = rdd4.lookup("key1")
val v2 = rdd4.lookup("key2")

Если вы не вызываете кеш, в этом случае rdd4 будет пересчитываться для каждого вызова для поиска (или любой другой функции, требующей оценки). Возможно, вы захотите прочитать документ на RDD, это довольно легко понять и объяснить идеи, которые они внесли в отношении того, как работают RDD.