Apache spark Spark是否必须在开始连接步骤(取决于reduceByKey的结果)之前完成处理reduceByKey步骤中的所有条目?

Apache spark Spark是否必须在开始连接步骤(取决于reduceByKey的结果)之前完成处理reduceByKey步骤中的所有条目?,apache-spark,Apache Spark,问题: 在开始连接步骤之前,Spark是否必须完成reduceByKey步骤中的所有条目的处理 我认为答案是否定的。我认为每个分区/任务都必须先完成reduceByKey任务,然后再转到join 详细信息: 在下面的示例中,我按键userId减少RDD,并将具有相同用户id的所有值嵌套到一个列表中 然后,我将(userid,listOfEvents)的这个RDD与(userid,otherEvent)的另一个RDD连接起来 注意,在本例中,reduceByKey和join之间的分区器是相同的(u

问题: 在开始连接步骤之前,Spark是否必须完成reduceByKey步骤中的所有条目的处理

我认为答案是否定的。我认为每个分区/任务都必须先完成reduceByKey任务,然后再转到join

详细信息: 在下面的示例中,我按键userId减少RDD,并将具有相同用户id的所有值嵌套到一个列表中

然后,我将(userid,listOfEvents)的这个RDD与(userid,otherEvent)的另一个RDD连接起来

注意,在本例中,reduceByKey和join之间的分区器是相同的(userId上的默认HashParitioner),因此这是否会改变reduceByKey是否必须在join之前完全完成所有数据的处理

在本例中,列表(eventA,eventB)与没有eventC的事件K连接的场景永远不会发生,对吗

但是,列表(eventA、eventB、eventC)可能与事件K连接,但EventD和事件F没有减少,是否可以发生

Impression Events
userId  Event
1       eventA
1       eventB
1       eventC

2       eventD
2       eventF

Conversion Events
userId  Event
1       eventK

2       eventL
//减少步骤
final javapairdd-impressionRDD=loadImpressionEvents()
.mapToPair(事件->{
final ObjectArrayList=新ObjectArrayList();
添加新事件(Event.getTimestamp(),
event.getCampaignIdentifier(),event.getSiteIdentifier());
返回新的Tuple2(
event.getUserId(),
列表
);
})
.reduceByKey((事件1、事件2)->{
//将impression事件与相同的用户id组合
事件1.添加所有(事件2);
返回事件1;
});
//连接步骤
最终JavaPairRDD conversionImpressions=loadConversionEvents()
.mapToPair(事件->新建Tuple2(
event.getUserId(),
事件
))
.左外圆(印痕RDD);

Spark必须先完成洗牌,然后才能启动cogroup和FLANT,因此在reduceByKey进行过程中无法启动join