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
Mapreduce mapPartitions在循环中的行为如何?_Mapreduce_Apache Spark_Pyspark - Fatal编程技术网

Mapreduce mapPartitions在循环中的行为如何?

Mapreduce mapPartitions在循环中的行为如何?,mapreduce,apache-spark,pyspark,Mapreduce,Apache Spark,Pyspark,我想了解mapPartitions函数在以下代码中的行为。它是否在每次迭代中创建单独的分区并将它们分配给节点。或者分区和分区到节点的映射在迭代过程中保持不变 理想情况下,我希望整个循环保持相同的分区 for i in range(10): x = rdd.mapPartitions(fun).reduce(lambda a,b:a+b) 视情况而定。如果缓存了rdd,则分区将被计算一次并在迭代过程中保留,除非出现某种故障,并且任务被重新调度到另一个工作进程上。否则,将为每个迭代重新计算

我想了解mapPartitions函数在以下代码中的行为。它是否在每次迭代中创建单独的分区并将它们分配给节点。或者分区和分区到节点的映射在迭代过程中保持不变

理想情况下,我希望整个循环保持相同的分区

for i in range(10):
    x = rdd.mapPartitions(fun).reduce(lambda a,b:a+b)

视情况而定。如果缓存了
rdd
,则分区将被计算一次并在迭代过程中保留,除非出现某种故障,并且任务被重新调度到另一个工作进程上。否则,将为每个迭代重新计算它。在这种情况下,答案取决于
rdd
的血统。如果不涉及洗牌,或者使用确定性分区和排序,那么答案是肯定的。否则,您不可能在每次迭代中看到相同的内容


如果您关心性能,那么缓存就足够了。如果您考虑在
mapPartitions
中执行一些副作用,并且希望在迭代之间保留这些副作用,那么您就不能依赖于此。

这取决于您。如果缓存了
rdd
,则分区将被计算一次并在迭代过程中保留,除非出现某种故障,并且任务被重新调度到另一个工作进程上。否则,将为每个迭代重新计算它。在这种情况下,答案取决于
rdd
的血统。如果不涉及洗牌,或者使用确定性分区和排序,那么答案是肯定的。否则,您不可能在每次迭代中看到相同的内容


如果您关心性能,那么缓存就足够了。如果您想在
mapPartitions
中执行一些副作用,并且希望在迭代之间保留这些副作用,那么您就不能依赖这些副作用。

这是对spark RDD中缓存工作方式的一个很好的描述。这是对spark RDD中缓存工作方式的一个很好的描述。