緩存的最佳實踐(),count (), ()

學習的最佳實踐使用緩存(),“count ()”,“()”DataFrame火花。

寫的ram.sankarasubramanian

去年發表在:2022年5月20日

緩存()是一個Apache火花DataFrame轉換,可以使用,數據集或抽樣當您想要執行多個操作。緩存()緩存指定DataFrame、數據集或集群抽樣的記憶你的工人。自緩存()是一個變換,緩存操作發生隻有當火花操作(例如,count (),顯示(),帶(),或write ())也用於DataFrame相同,數據集或抽樣在一個單一的行動。

分別調用緩存()和數量()

% scala df1 = spark.read.parquet (input_path1) df2 = spark.read.parquet (input_path2) df1.cache() #緩存DataFrame df1 joined_df = df1。加入(df2 df1.id = = df2。id、“內在”)#加入DataFrame df1和df2 filtered_df = joined_df。過濾器(" name = =約翰”)#過濾器名稱“約翰”的加入DataFrame df1.count() #調用數()緩存DataFrame filtered_df.show() #顯示過濾DataFrame filtered_df

在這個例子中,DataFramedf1緩存到內存時df1.count ()是執行。df1.cache ()不啟動DataFrame緩存操作嗎df1

調用緩存DataFrame帶()

% scala df = spark.table (input_table_name) df.cache.take(5) #叫帶(5)DataFrame df,同時還可以緩存它df.count() #調用計數DataFrame df ()

在這個例子中,DataFramedf緩存到內存時(5)是執行。隻有一個分區的DataFramedf在這種情況下,緩存,因為(5)隻有流程5條記錄。隻有記錄的分區處理,且僅處理分區的緩存。其他分區的DataFramedf也不會被緩存。

因此,當df.count ()被調用時,DataFramedf再次創建,因為隻有一個分區可用集群的緩存。

調用(5)在這個示例中隻緩存DataFrame的14%。

14%的DataFrame緩存的緩存,當調用。

緩存DataFrame調用數()

% scala df = spark.table (input_table_name) df.cache.count() #調用計數DataFrame df(),同時還可以緩存它df.count() #調用數()DataFrame df df.filter (" name = =約翰”).count ()

在這個例子中,DataFramedf緩存到內存時df.count ()是執行。返回dataframe的計數,處理所有的分區。這意味著所有的緩存分區。

因此,當df.count ()df.filter (" name = =約翰”).count ()DataFrame,稱為後續行動嗎df獲取集群的緩存,而不是被重新創建。

調用count ()在這個例子中緩存DataFrame的100%。

100%的DataFrame緩存當調用緩存和計數。

總結

你應該叫count ()write ()後立即調用緩存()這樣整個DataFrame處理和緩存在內存中。如果你隻緩存DataFrame的一部分,整個DataFrame可能重新計算當DataFrame執行後續操作。

刪除

信息

的建議緩存()也適用於persist ()