Apache spark Spark中的连接和cogroup
有迹象表明Spark中的连接是通过/基于cogroup函数/基元/变换实现的。所以让我首先关注cogroup-它返回的结果是RDD,它基本上由cogroup RDD的所有元素组成。换句话说,对于每个共组RDD中的每个键,至少有一个来自至少一个共组RDD的元素 这意味着,当更小的流式处理(例如JavaPairdStreamRDD)不断与更大的批处理RDD连接时,将导致为结果的多个实例分配RAM(共组)RDD a.k.a本质上是大批处理RDD和更多。。。 显然,当数据流RDD被丢弃时,RAM会被返回,并且它们会定期这样做,但这似乎仍然是RAM消耗中不必要的峰值 我有两个问题:Apache spark Spark中的连接和cogroup,apache-spark,spark-streaming,Apache Spark,Spark Streaming,有迹象表明Spark中的连接是通过/基于cogroup函数/基元/变换实现的。所以让我首先关注cogroup-它返回的结果是RDD,它基本上由cogroup RDD的所有元素组成。换句话说,对于每个共组RDD中的每个键,至少有一个来自至少一个共组RDD的元素 这意味着,当更小的流式处理(例如JavaPairdStreamRDD)不断与更大的批处理RDD连接时,将导致为结果的多个实例分配RAM(共组)RDD a.k.a本质上是大批处理RDD和更多。。。 显然,当数据流RDD被丢弃时,RAM会被返回
没那么糟。这在很大程度上取决于分区的粒度。Cogroup将首先在磁盘中按键洗牌到不同的执行器节点。对于每个键,是的,对于两个RDD,具有该键的所有元素的整个集合都将加载到RAM中并提供给您。但并不是所有的键在任何给定的时间都需要在RAM中,所以除非您的数据真的是倾斜的,否则您不会因此受到太大的影响 在组合前对同一个分区器使用重新分区会有帮助吗?我有5个以上的JavaPairRDD,包含一个主pairRDD。我想把这些都结合起来。如何做到这一点?如何对大型数据集使用
cogroup
,例如当我使用collect()
时,它会抛出内存不足异常rdd1=rdd2.cogroup(rdd3.collect>)。你能帮我解决这个问题吗?[.分区能帮我解决这个问题吗?@Vignesh当然,我离开了,在那里回答。