Я понимаю, что если у меня есть фрейм данных, если я кэширую его () и запускаю действие, подобное df.take(1)
или df.count (), он должен вычислять фрейм данных и сохранять его в памяти, и всякий раз, когда этот кешированный фрейм данных вызывается в программе, которую он использует уже вычисленный фрейм данных из кеша.
но моя программа работает не так.
У меня есть фрейм данных, как показано ниже, я кэширую его, а затем сразу же запускаю действие df.count
.
val df = inputDataFrame.select().where().withColumn("newcol" , "").cache()
df.count
Когда запускаю программу. В пользовательском интерфейсе Spark я вижу, что первая строка выполняется в течение 4 минут, а когда дело доходит до второй строки, она снова выполняется 4 минуты, в основном первая строка пересчитывается дважды?
Разве первая строка не должна вычисляться и кэшироваться при срабатывании второй строки?
как решить эту проблему. Я застрял, посоветуйте, пожалуйста.