Spark / Scala中array.map和rdd.map的区别是什么?

时间:2016-09-14 14:43:42

标签: scala apache-spark

我发现RDD的map函数生成了map任务,而array的map函数没有生成任何新任务,reduce函数也是如此。

它们之间有什么区别,是否鼓励它们随时随地使用map / reduce函数代替for / foreach?

2 个答案:

答案 0 :(得分:3)

  

我找到了rdd的map函数生成map任务,以及map函数   数组不会生成任何新任务

这是一个苹果与橘子的比较。

RDD是分布式数据集的抽象。当您在其中进行操作时,转换会创建一个懒惰的评论MapPartitionsRDD,这本身就是另一个RDD

当您在Array[T]上工作时,所有内容都是本地和内存中的,转换可以来自Array[T]Array[U]或其他任何内容,以及它被严格评估。

RDD分为多个分区,它们本身可以被视为较小的集合,每个分区以分布式方式运行,而Array[T]没有这些属性,除非基础类型{{1 }}本身就是T

  

鼓励使用map / reduce函数而不是for / foreach   随时随地都可以吗?

同样,很难回答这样的问题。 Map-Reduce是用于分布式并行计算的通用编程模型,而Array[U]for是用于特定目的的编程结构。

答案 1 :(得分:1)

Spark调度程序(在驱动程序进程中运行)不会为数组或RDDDStreams以外的任何其他数据结构安排任何任务。

它识别RDD/DStreams上的所有操作(转换或操作)并为它们安排作业,这些作业分为多个阶段,并进一步分为任务。

scheduler-->(knows RDD & schedules)-->Jobs-->(run in)-->Stages-->(evaluated in)-->Tasks

scheduler-->(does not know array)-->ignore

当您说map / reduce时,我将其视为mapreduce,并将其视为foreach。所有这些都用于链接中描述的不同目的。确保你在这里想知道什么。