Всегда ли промежуточные значения требуют кэширования, чтобы избежать повторного вычисления в искре? - PullRequest
0 голосов
/ 08 апреля 2019

Мое искровое приложение состоит из начального RDD, на котором я выполняю 10 преобразований. DAG для этого искрового применения является полностью линейным. Если бы мне было интересно получить число записей в СДР после первых 5 преобразований, нужно ли мне его кэшировать, чтобы избежать повторного вычисления СДР с самого начала?

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

Например,

val rdd2 = initalRDD.map(<something>)
val rdd3 = rdd2.map(<something>)
println(rdd3.count)
val rdd4 = rdd3.map(<something>) 

Нужен ли rdd3 кэш, чтобы избежать повторного вычисления, поскольку он выполняет как подсчет, так и отображение?

1 Ответ

1 голос
/ 08 апреля 2019

На самом деле это так, но только при условии, что у вас будет некоторое действие на rdd4.Преобразования не приводят к выполнению DAG самостоятельно.Таким образом, если у вас есть только Transforms, что у вас есть на самом деле, и ответ - нет.

Если у вас не было счетчика, а был только конвейер операций с возможным единственным действием, то кэширование на rdd3 не требовалось бы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...