Кажется, есть несколько сообщений по этому вопросу, но ни одна из них не отвечает тому, что я понимаю.
Следующий код запускается на DataBricks:
spark.sparkContext.setCheckpointDir("/dbfs/FileStore/checkpoint/cp1/loc7")
val checkpointDir = spark.sparkContext.getCheckpointDir.get
val ds = spark.range(10).repartition(2)
ds.cache()
ds.checkpoint()
ds.count()
ds.rdd.isCheckpointed
Добавлено улучшение сортов:
...
val ds2 = ds.checkpoint(eager=true)
println(ds2.queryExecution.toRdd.toDebugString)
...
возвращается:
(2) MapPartitionsRDD[307] at toRdd at command-1835760423149753:13 []
| MapPartitionsRDD[305] at checkpoint at command-1835760423149753:12 []
| ReliableCheckpointRDD[306] at checkpoint at command-1835760423149753:12 []
checkpointDir: String = dbfs:/dbfs/FileStore/checkpoint/cp1/loc10/86cc77b5-27c3-4049-9136-503ddcab0fa9
ds: org.apache.spark.sql.Dataset[Long] = [id: bigint]
ds2: org.apache.spark.sql.Dataset[Long] = [id: bigint]
res53: Boolean = false
Вопрос 1:
ds.rdd.isCheckpointed или ds2.rdd.isCheckpointed оба возвращают False , хотя с подсчетом у меня не ленивая ситуация. Почему, когда, в частности, ../loc 7 и 10 пишутся с (частичными) файлами? Также мы видим, что ReliableCheckPoint!
Не вполне объяснил всю концепцию. Пытаюсь разобраться с этим.
Вопрос 2 - дополнительный вопрос:
Кеш действительно необходим или нет в последних версиях Spark 2.4? Новая ветка на ds, если она не кэшируется, вызовет ли она пересчет или это лучше? Кажется странным, что данные контрольных точек не будут использоваться, или мы можем сказать, что Spark действительно не знает, что лучше?
Из High Performance Spark у меня складывается смешанное впечатление, что проверка наведения не очень рекомендуется, но опять же, это так.