Я делаю что-то вроде этого:
import pandas as pd
pdf = pd.DataFrame({
'a': [1, 2, 3],
'b': ['a', 'b', 'c']
})
parent_df = spark.createDataFrame(pdf)
parent_df.cache().count()
child_df = parent_df.replace('c', 'x')
child_df.cache().count()
parent_df.unpersist()
По сути, я хочу кэшировать parent_df
, потому что на следующих шагах я делаю некоторые тяжелые преобразования для него.После того, как я закончу их и вернусь child_df
, мне больше не нужен parent_df
, поэтому я хочу выпустить его из кэша.Тем не менее, при этом unpersists также недавно кэшированный child_df
!
Очевидно, что вопросы таковы:
- почему это происходит?
- как мне добиться того, чего я хочу (освобождая
parent_df
из кэша, сохраняя при этомновый child_df
в кеше)?
Интересно, что работает противоположный сценарий - то есть, если я отменю child_df
вместо parent_df
в последней строке, parent_df
будет кешироваться, как и ожидалось, покаchild_df
будет выпущено.
PS: я нашел похожий вопрос здесь Понимание кэширования Spark .Однако ответ на этот вопрос, похоже, не работает в этом случае, поскольку здесь мы уже вызываем действие (.count()
) сразу после кэширования.