Apache Spark为什么不兼容函数?

blu*_*sky 4 parallel-processing scala apache-spark

阅读http://spark.apache.org/docs/latest/programming-guide.html上的 Apache Spark指南,它指出:

在此输入图像描述

为什么取功能不能并行运行?并行实现这种功能有什么困难?是否与事实有关,为了获取RDD的前n个元素,需要遍历整个RDD?

Dan*_*bos 8

实际上,虽然take不完全平行,但它也不是完全顺序的.

例如,假设你take(200),每个分区有10个元素.take将首先获取分区0并看到它有10个元素.它假定它需要20个这样的分区来获得200个元素.但是最好在并行请求中要求更多.所以它需要30个分区,它已经有1.所以它接下来并行地获取分区1到29 .这可能是最后一步.如果它非常不吉利,并且没有找到总共200个元素,它将再次进行估算并同时请求另一批.

查看代码,它有详细记录:https: //github.com/apache/spark/blob/v1.2.0/core/src/main/scala/org/apache/spark/rdd/RDD.scala#L1049

我认为文档是错误的.只有在需要单个分区时才会进行本地计算.这是第一次传递(获取分区0)的情况,但通常不是后续传递中的情况.

  • 是.但在最坏的情况下,它将完全按顺序通过分区.为此,分区的大小必须在几何上减小,但实际上不太可能.实际上,分区大小通常是统一的,因此`take`将需要2次迭代,就像你描述的那样. (2认同)