один раз и не вызывает реально кеширование датафрейма
df2.count() - вот тут уже посчитает весь датафрейм и заперсистит его
я понимаю что isEmpty имеет упрощённый план до первой непустой партиции
но на persist датафрейме я бы ожидал что оно тригернёт вычисление и кеширование указанного дф чтобы потом след операцией я уже работал с кешированным
а так получается первый раз isEmpty молотит
потом второй раз молотит когда я дествительно с фреймом работаю
может кто-то объяснить логику или я хочу слишком много?
Пока что получается вот такой оператор (без обёрток): df.limit(1).groupBy().count().queryExecution.executedPlan.executeCollect().head.getLong(0) executeCollect() уже возвращает локальную коллекцию, так что дальше можно не смотреть. Но походу, всё дело в limit(1), который создаёт GlobalLimit, которому нужно распределение с числом партиций 1, а это coalesce, который будет добавлен в какой-то стратегии. Дальше мысль не идёт, как связать с моментом кеширования не вижу. Ещё посмотрю ближе к ночи
Обсуждают сегодня