我发现RDD
的map函数生成了map任务,而array的map函数没有生成任何新任务,reduce函数也是如此。
它们之间有什么区别,是否鼓励它们随时随地使用map / reduce函数代替for / foreach?
答案 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调度程序(在驱动程序进程中运行)不会为数组或RDD
和DStreams
以外的任何其他数据结构安排任何任务。
它识别RDD/DStreams
上的所有操作(转换或操作)并为它们安排作业,这些作业分为多个阶段,并进一步分为任务。
scheduler-->(knows RDD & schedules)-->Jobs-->(run in)-->Stages-->(evaluated in)-->Tasks
scheduler-->(does not know array)-->ignore
当您说map / reduce时,我将其视为map和reduce,并将其视为foreach。所有这些都用于链接中描述的不同目的。确保你在这里想知道什么。