Как я знаю, существуют два типа зависимостей: узкий & широкий. Но я не понимаю, как зависимость влияет на ребенок RDD. Есть ребенок RDD только метаданные, содержащие информацию о том, как строить новые блоки RDD от parent RDD? Или ребенок RDD является самодостаточным набором данных, который был создан с parent RDD?Что такое зависимость RDD от Spark?
ответ
Да, дочерний RDD - это метаданные, которые описывают, как вычислять RDD из родительского RDD.
Рассмотрим org/apache/spark/rdd/MappedRDD.scala
, например:
private[spark]
class MappedRDD[U: ClassTag, T: ClassTag](prev: RDD[T], f: T => U)
extends RDD[U](prev) {
override def getPartitions: Array[Partition] = firstParent[T].partitions
override def compute(split: Partition, context: TaskContext) =
firstParent[T].iterator(split, context).map(f)
}
Когда вы говорите rdd2 = rdd1.map(...)
, rdd2
будет такой . compute
выполняется только позже, например, когда вы звоните rdd2.collect
.
RDD всегда такие метаданные, даже если у него нет родителей (например, sc.textFile(...)
). Единственный случай, когда RDD хранится на узлах, - это если вы пометили его для кэширования с помощью rdd.cache
, а затем вызывают его вычисление.
Другая подобная ситуация вызывает rdd.checkpoint
. Эта функция отмечает RDD для контрольной точки. В следующий раз, когда он будет вычислен, он будет записан на диск, а позже доступ к RDD заставит его читать с диска вместо пересчета.
Разница между cache
и checkpoint
заключается в том, что кэшированный RDD по-прежнему сохраняет свои зависимости. Кэшированные данные могут быть отброшены под давлением памяти, и их, возможно, придется пересчитать частично или полностью. Это не может произойти с контрольным RDD, поэтому зависимости отбрасываются там.
- 1. Удалить дубликаты от Spark RDD
- 2. Что такое Spark Job?
- 3. Что такое зависимость Maven?
- 4. spark schema rdd to RDD
- 5. Что такое Spark UDFS?
- 6. Spark получение ключей от ключевого значения RDD
- 7. Поток от Spark RDD к процессу Scala
- 8. Что такое транзитивная зависимость Maven?
- 9. Что является результатом преобразования RDD в Spark?
- 10. Что-то не так с Spark RDD
- 11. Исходное значение Spark RDD от кортежа
- 12. Spark RDD data selection
- 13. Apache Spark RDD Workflow
- 14. Apache-Spark: что такое карта (_._ 2)?
- 15. Spark RDD Внешнее хранилище
- 16. Синхронизация между разделами Spark RDD
- 17. Итерация через Spark RDD
- 18. Spark RDD проблемы
- 19. Array [Byte] Spark RDD для String Spark RDD
- 20. Spark: Манипулирование несколькими RDD
- 21. Spark RDD apend
- 22. Сомнения на RDD Spark
- 23. Java Spark RDD в другом RDD?
- 24. Spark RDD throwing NullPointerException
- 25. Spark scala RDD traversing
- 26. Spark: Merge RDD
- 27. Spark RDD для обновления
- 28. Apache Spark RDD Split "|"
- 29. Apache Spark Rdd persist
- 30. Spark: Работает вложенная RDD
Благодарим за четкий ответ. Но для уточнения. Насколько я понимаю, новый преобразованный RDD - это только новый набор указателей на некоторые (отфильтрованные) блоки старых данных? Или новый преобразованный RDD - это новая копия старых данных? Я заинтересован в физических вещах, которые происходят в кластере с RDD во время трансформации. – Speise
RDDs ленивы. Ни одна из работ не выполняется до тех пор, пока не будет выполнено действие с нетерпением (например, 'collect' или' reduce'). Когда действие в конечном счете выполняется, операции типа «map» и «filter» выполняются как цепочка итераторов. Важным моментом является то, что RDD обычно не представляет _data_, он представляет _calculation_. –
Хорошо, но представьте себе, что у нас есть работа Spark со следующими шагами вычислений: (1) RDD -> (2) map -> (3) filter -> (4) collect. На первом этапе у нас есть вход RDD, на втором этапе мы преобразуем эти RDD в карту (пары значений kay). Итак, каков результат Искры на третьем этапе во время фильтрации? Будет ли Spark просто удалять ненужные элементы из RDD? Или он создаст абсолютно новый RDD с необходимыми элементами и удалит предыдущий? Что будет с кучей элементов родительского RDD, которые не нужны после фильтрации? – Speise