Почему первый этап проходит дважды? - PullRequest
0 голосов
/ 23 октября 2019

Я запустил задание потоковой передачи с искрой и обнаружил запутанный сценарий:

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:

Screenshot 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:

Screenshot Case2 DAG

Мои вопросы:

(1) В Case1, почему первый этапвыполняется дважды и не использует один и тот же набор данных?

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

Спасибо!

...