你好,
我使用一個持續呼籲火花dataframe內部應用程序加速計算。dataframe使用在我的應用程序和應用程序的最後我想要清除緩存整個火花的會話通過調用明確引發會話緩存。然而,我無法清除緩存。
沿著這些線路的事情發生了:
#從pyspark Python代碼。.getOrCreate sql進口SparkSession火花= SparkSession.builder.config()() #隻是一個例子df = spark.read.csv (example.csv) df.cache() #清理緩存spark.catalog.clearCache ()
clearCache命令並不做任何事和緩存仍然是可見的火花UI。(磚- > SparkUI - >存儲。)
下麵的命令也不顯示任何持久的抽樣的,雖然在現實中存儲在UI中顯示多個緩存的抽樣。
#從pyspark Python代碼。sql進口SQLContext spark_context =火花。_sc sql_context = SQLContext (spark_context) spark._jsc.getPersistentRDDs() #結果:{}
正確的方法是什麼引發會話/火花的清除緩存集群?
規格:我在Databrick運行時10.4 LST和前後一致地使用databricks-connect = = 10.4.18我。
clearCache@Maarten van Raaij:
clearCache後原因調用unpersist () () - >
當你叫spark.catalog.clearCache(),它清除所有緩存的緩存表和DataFrames火花。然而,重要的是要注意,clearCache ()
方法隻刪除相關的元數據緩存表和DataFrames,而不是實際的緩存數據本身。實際的緩存數據保持在內存中,直到它是驅逐由於內存壓力或直到它顯式地使用unpersist unpersisted()方法。
@Maarten van Raaij:請嚐試以下和實驗的選項:
沒有解決方案:
嗨@Suteja卡努裏人,
感謝您的考慮和回複!
然而不幸的是,我還沒有找到一個解決方案。
除了這些點,我也很好奇為什麼緩存出現在我SparkUI和應用計算時使用的數據,但我不能得到持久抽樣的當我使用sql_context。(最後一個代碼塊在早前發布的文章)。
有什麼其他的想法我可以試試嗎?
親切的問候,
Maarten
@Maarten van Raaij:
例子:
從pyspark。sql進口SparkSession #創建一個火花會話火花= SparkSession.builder.appName(“中”).getOrCreate() #緩存DataFrame df = spark.read.csv (data.csv) df.cache () # spark.catalog.clearCache清除緩存()從記憶# unpersist DataFrame df.unpersist ()
注意DataFrame上的緩存()方法用於在內存中緩存數據。unpersist()方法用於將數據從內存後不再需要。
有可能您正在使用錯誤的火花上下文訪問緩存的抽樣。如果緩存使用SparkContext抽樣對象,您需要使用相同的對象檢索緩存的抽樣後。類似地,如果您使用的緩存DataFrame SparkSession對象,您需要使用相同的對象檢索緩存DataFrame之後。如果您正在使用
sql_context對象訪問緩存的抽樣,它可能無法找到緩存的抽樣,因為它是使用不同的火花上下文緩存。