Я всегда понимал, что persist()
и cache()
, затем действие по активации DAG, рассчитают и сохранят результат в памяти для последующего использования. Многие потоки здесь расскажут вам о необходимости кэширования для повышения производительности часто используемых фреймов данных.
Недавно я сделал тест и был сбит с толку, потому что, похоже, это не так.
temp_tab_name = "mytablename";
x = spark.sql("select * from " +temp_tab_name +" limit 10");
x = x.persist()
x.count() #action to activate all the above steps
x.show() #x should have been persisted in memory here, DAG evaluated, no going back to "select..." whenever referred to
x.is_cached #True
spark.sql("drop table "+ temp_tab_name);
x.is_cached #Still true!!
x.show() # Error, table not found here
Так что мне кажется, что х никогда не вычисляется и сохраняется. Следующая ссылка на x все еще восходит к оценке ее определения DAG "select..."
. Что-то, что я здесь пропустил?