在我的spark应用程序中,每个分区都生成一个对象,该对象很小,并且包含该分区中数据的摘要。现在,我将它们放入也包含主要数据的Datafram中进行收集。
val df: DataFrame[(String,Any)] = df.mapPartitions(_ => /*add Summary Object*/ )
val summaries = df.filter(_._1 == "summary").map(_._2).collect()
val data = df.filter(_._1 == "data").map(_._2) // used to further RDD processing
将立即使用Summary对象,而data
将用于RDD处理。
问题在于,代码在我的应用程序中两次生成df
的求值(一个在代码中,另一个在以后),这很重。而且,cache
或persist
会有所帮助,但我无法在我的应用中使用。
是否有什么好方法可以从每个分区中收集对象? 蓄能器怎么样?