为什么第一阶段运行两次?

时间:2019-10-23 10:54:54

标签: scala apache-spark streaming

我进行了火花结构化的流媒体作业,发现混乱的场景:

案例1:代码

val stus: Dataset[Student] = lines.as[String].map(s=>{val sp = s.split(" "); Student(sp(0).toInt, sp(1), sp(2).toInt)}).as("stus")
val stus1 = stus.map(s=>s).as("stus1")
val stus2 = stus.map(s=>s).as("stus2")
val summary = stus1.join(stus2, col("stus1.id") === col("stus2.id"))

案例1 DAG:

Screenshot Case1 DAG

Case2代码

val stus: Dataset[Student] = lines.as[String].map(s=>{val sp = s.split(" "); Student(sp(0).toInt, sp(1), sp(2).toInt)}).as("stus")
val stus1 = stus.as("stus1")
val stus2 = stus.as("stus2")
val summary = stus1.join(stus2, col("stus1.id") === col("stus2.id"))

案例2 DAG:

Screenshot Case2 DAG

我的问题:

(1)在Case1中,为什么第一阶段运行两次并且不重用同一数据集?

(2)在案例1中,结果显示stus1stus2具有相同的内容。因此,它们来自同一数据集,但来自哪个数据集?为什么Spark使用非常原始的数据集?

谢谢!

0 个答案:

没有答案