缓存的最佳实践(),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 ()


这篇文章有用吗?