Если вы не заботитесь о гранулярности, то самое простое решение - вызвать Catalog.clearCache
:
spark_session(sc) %>% invoke("catalog") %>% invoke("clearCache")
. Кэширование определенного объекта гораздо менее простое из-за косвенного обращения sparklyr
.Если вы проверите объект, возвращенный sdf_cache
, вы увидите, что постоянная таблица не отображается напрямую:
df <- copy_to(sc, iris, memory=FALSE, overwrite=TRUE) %>% sdf_persist()
spark_dataframe(df) %>%
invoke("storageLevel") %>%
invoke("equals", invoke_static(sc, "org.apache.spark.storage.StorageLevel", "NONE"))
[1] TRUE
Это потому, что вы не получаете зарегистрированную таблицу напрямую, а скорее результатподзапроса типа SELECT * FROM ...
.
Это означает, что вы не можете просто позвонить unpersist
:
spark_dataframe(df) %>% invoke("unpersist")
как в одном из официальных API.
Вместо этого вы можете попытаться получить имя исходной таблицы, например, вот так:
src_name <- as.character(df$ops$x)
, а затем вызвать Catalog.uncacheTable
:
spark_session(sc) %>% invoke("catalog") %>% invoke("uncacheTable", src_name)
Вероятно, это не самое надежное решение, поэтому, пожалуйста, используйте его с осторожностью.