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 为什么mapPartitionsWithIndex会在Spark中引起混乱?_Apache Spark_Shuffle_Rdd - Fatal编程技术网

Apache spark 为什么mapPartitionsWithIndex会在Spark中引起混乱?

Apache spark 为什么mapPartitionsWithIndex会在Spark中引起混乱?,apache-spark,shuffle,rdd,Apache Spark,Shuffle,Rdd,我是新来的。我正在测试应用程序中检查洗牌问题,我不知道为什么在我的程序中,mapPartitionsWithIndex方法会导致洗牌!正如你们在图中看到的,我的初始RDD有两个16MB的分区和大约49.8MB的随机写入。 我知道map或mapPartition或mapPartitionsWithIndex不是像groupByKey那样的混洗转换,但我发现它们也会导致Spark中的混洗。为什么? 我认为您在mapPartitionsWithIndex之后执行了一些join/group操作,这导致

我是新来的。我正在测试应用程序中检查洗牌问题,我不知道为什么在我的程序中,
mapPartitionsWithIndex
方法会导致洗牌!正如你们在图中看到的,我的初始RDD有两个16MB的分区和大约49.8MB的随机写入。 我知道
map
mapPartition
mapPartitionsWithIndex
不是像
groupByKey
那样的混洗转换,但我发现它们也会导致Spark中的混洗。为什么?


我认为您在mapPartitionsWithIndex之后执行了一些join/group操作,这导致了混乱

您可以通过修改代码来建立它

现行代码

val rdd = inputRDD1.mapPartitionsWithIndex(....)
val outRDD = rdd.join(inputRDD2)
修改代码

val rdd = inputRDD1.mapPartitionsWithIndex(....)
println(rdd.count)

但是,如果是这样,为什么SCAP认为这个方法是一个阶段,并且不考虑下一个连接/组操作作为阶段中的最后操作?阶段对应于所有执行相同代码的任务集合,每个任务在数据的不同子集上执行。每个阶段都包含一系列转换,这些转换可以在不搅乱全部数据的情况下完成。-我知道,但我记得每个阶段中的最后一个操作通常是一个洗牌操作,如果我们假设在这个map方法之后有一个join/group操作,那么它应该是这个阶段中的最后一个操作,并显示而不是mapPartitionWithIndex.no,这将是下一个阶段。对于简单的联接工作流,需要3个阶段。第一个用于加载rdd1+transformation+shuffle输出,第二个用于加载rdd2+transformation+shuffle输出,第三个用于读取shuffle输出并加入这些提要,然后保存到磁盘或执行任何其他操作。我按照您告诉我的修改了代码,也就是说,
count
紧跟在
mapPartitionWithIndex
之后的rdd,但是没有迹象表明为什么会发生混乱。