Я запустил задание потоковой передачи с искрой и обнаружил запутанный сценарий:
Case1: код
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"))
Case1 DAG:

Case2 Code
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"))
Case2 DAG:

Мои вопросы:
(1) В Case1, почему первый этапвыполняется дважды и не использует один и тот же набор данных?
(2) В случае 1 результаты показывают, что stus1
и stus2
имеют одинаковое содержимое. Таким образом, они из того же набора данных, но какой набор данных? Почему Spark использует очень оригинальный набор данных?
Спасибо!