Spark,从每个分区获取单个值的有效方法吗?累加器?

在我的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的求值(一个在代码中,另一个在以后),这很重。而且,cachepersist会有所帮助,但我无法在我的应用中使用。

是否有什么好方法可以从每个分区中收集对象? 蓄能器怎么样?

xuzaizhan 回答:Spark,从每个分区获取单个值的有效方法吗?累加器?

使传递给mapPartitions的函数返回仅包含摘要对象的迭代器。然后,您可以直接进行收集,而无需进行任何其他过滤。

,
  

您为什么不能使用缓存或持久化? – Dennis Jaheruddin

     

@DennisJaheruddin,因为df可能很大,比我的记忆大一百倍。 – user2037661

如果要缓存内存中不适合的数据帧,则可以使用存储级别MEMORY_AND_DISK。当前,此存储级别是调用cachepersist时的默认存储级别。

本文链接:https://www.f2er.com/3096992.html

大家都在问