我进行了火花结构化的流媒体作业,发现混乱的场景:
案例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:
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:
我的问题:
(1)在Case1中,为什么第一阶段运行两次并且不重用同一数据集?
(2)在案例1中,结果显示stus1
和stus2
具有相同的内容。因此,它们来自同一数据集,但来自哪个数据集?为什么Spark使用非常原始的数据集?
谢谢!