val nums = sc.parallelize(0 to 9)
scala> nums.toDebugString
res0: String = (8) ParallelCollectionRDD[1] at parallelize at <console>:24 []
就在转变之后,就像 map ,则创建另一个rdd,初始rdd是其父rdd。
val even = nums.map(_ * 2)
scala> even.toDebugString
res1: String =
(8) MapPartitionsRDD[2] at map at <console>:26 []
| ParallelCollectionRDD[1] at parallelize at <console>:24 []
2条答案
按热度按时间h9a6wy2h1#
您(作为spark开发人员)将“遇到”的第一个dag是将转换作为rdd应用到数据集时。
创建rdd(通过从外部存储加载数据集或从本地集合创建数据集)后,您将从单节点rdd沿袭开始。
就在转变之后,就像
map
,则创建另一个rdd,初始rdd是其父rdd。等等。通过使用转换操作符转换rdd,您可以构建一个转换图,它是rdd沿袭,只是rdd依赖项的有向无环图。
另一个可能会告诉你的dag是当你在rdd上执行一个操作,这将导致一个spark作业。rdd上的spark作业最终将Map到一组阶段(通过
DAGScheduler
)再次创建一个阶段图,它是一个有向无环的阶段图。spark中没有其他DAG。
我不能评论hadoop。
ylamdve62#
Spark
lines = spark.textfile("hdfs://<file_path>",2)
.这里rdd有两个分区。在上图中,a、b、c和d是这样的RDD,每个RDD有2个分区(红色框)。如图所示,每个rdd都是转换的结果。RDD之间的依赖基本上分为窄依赖和宽依赖。在父rdd的每个分区只被子rdd的一个分区使用的情况下,形成了窄依赖关系,而数据的无序排列导致了宽依赖关系。
所有狭义依赖关系形成阶段1,而广义依赖关系形成阶段2。
这样的阶段形成有向无环图
然后将这些阶段提交给任务调度器。
希望这有帮助。