Есть ли способ сохранить сводку большого RDD в памяти, как summaryRDD, на которой большинство вычислений может быть выполнено с возможно меньшими усилиями.Основываясь на вычислениях, большое количество записей может быть отфильтровано в итоговой СДР, и такая же фильтрация может быть выполнена на исходной СДР.
Предположим, у нас есть очень большая СДР, называемая большой СДР, которая включает в себя изображения.
Мы можем преобразовать этот RDD в меньший RDD, который является отображением большого RDD на вектор признаков (SmallVector) каждого изображения.Этот вектор признаков может быть использован для сокращения записей.
Я должен отметить, что мы хотим сохранить summaryRDD, поскольку есть последующие аналогичные операции, которые мы можем выполнить над ним.Но мы не хотим (на самом деле не можем) сохранить LargeRDD в основной памяти.
Теперь проблема заключается в том, что после удаления summaryRDD, как мы можем эффективно извлекать соответствующие записи из largeRDD (только отфильтрованногоиз них)?Я могу догадаться, что такого способа нет, так как большое значение RDD должно вычисляться полностью каждый раз.
val largeRDD: RDD[(Int, LargeObject)] = ???
val summaryRDD: RDD[(Int, SmallVector)] = largeRDD.map(_.toSmallVector).cache
val filtered: RDD[(Int, SmallVector)] = summaryRDD.filter(_.isWhatIWant)