Как не баловаться в Спарклире? - PullRequest
0 голосов
/ 28 мая 2019

Я использую Sparklyr для проекта и понял, что сохранение очень полезно.Я использую sdf_persist для этого со следующим синтаксисом (исправьте меня, если я ошибаюсь):

data_frame <- sdf_persist(data_frame)

Теперь я достигаю точки, где у меня слишком много RDD, хранящихся в памяти, поэтому мне нужночтобы остаться без присмотра.Однако я не могу найти функцию для этого в Sparklyr.Обратите внимание, что я попробовал:

dplyr::db_drop_table(sc, "data_frame")
dplyr::db_drop_table(sc, data_frame)
unpersist(data_frame)
sdf_unpersist(data_frame)

Но ни один из этих способов не работает.

Также я стараюсь избегать использования tbl_cache (в этом случае кажется, что db_drop_table работает)кажется, что sdf_persist предлагает больше свободы на уровне хранилища.Возможно, мне не хватает общей картины того, как использовать постоянство, и в этом случае я буду рад узнать больше.

1 Ответ

0 голосов
/ 28 мая 2019

Если вы не заботитесь о гранулярности, то самое простое решение - вызвать 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)

Вероятно, это не самое надежное решение, поэтому, пожалуйста, используйте его с осторожностью.

...