Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark中的连接和cogroup_Apache Spark_Spark Streaming - Fatal编程技术网

Apache spark Spark中的连接和cogroup

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会被返回

有迹象表明Spark中的连接是通过/基于cogroup函数/基元/变换实现的。所以让我首先关注cogroup-它返回的结果是RDD,它基本上由cogroup RDD的所有元素组成。换句话说,对于每个共组RDD中的每个键,至少有一个来自至少一个共组RDD的元素

这意味着,当更小的流式处理(例如JavaPairdStreamRDD)不断与更大的批处理RDD连接时,将导致为结果的多个实例分配RAM(共组)RDD a.k.a本质上是大批处理RDD和更多。。。 显然,当数据流RDD被丢弃时,RAM会被返回,并且它们会定期这样做,但这似乎仍然是RAM消耗中不必要的峰值

我有两个问题:

  • 无论如何,是否可以更“精确”地控制协同组过程,例如,告诉它只包括协同组RDD元素,其中每个给定键至少有一个来自每个协同组RDD的元素。根据当前的cogroup API,这是不可能的

  • 如果cogroup真的是一把大锤,其次,连接是基于cogroup的,那么即使它们可以在最终用户可见的最终结果方面呈现出更漂亮的画面,这是否意味着在引擎盖下仍然存在同样的严重RAM消耗


  • 没那么糟。这在很大程度上取决于分区的粒度。Cogroup将首先在磁盘中按键洗牌到不同的执行器节点。对于每个键,是的,对于两个RDD,具有该键的所有元素的整个集合都将加载到RAM中并提供给您。但并不是所有的键在任何给定的时间都需要在RAM中,所以除非您的数据真的是倾斜的,否则您不会因此受到太大的影响

    在组合前对同一个分区器使用重新分区会有帮助吗?我有5个以上的JavaPairRDD,包含一个主pairRDD。我想把这些都结合起来。如何做到这一点?如何对大型数据集使用
    cogroup
    ,例如当我使用
    collect()
    时,它会抛出内存不足异常
    rdd1=rdd2.cogroup(rdd3.collect>)。你能帮我解决这个问题吗?[.分区能帮我解决这个问题吗?@Vignesh当然,我离开了,在那里回答。