【发布时间】:2020-01-29 03:25:22
【问题描述】:
考虑以下 spark-sql 查询:
Seq(("b", 2), ("d", 4), ("a", 1), ("c", 3))
.toDF("letter", "number")
.select($"letter")
.where($"number" > 1)
.show
原来的查询甚至可以拆分,行为依然存在:
val letters =
Seq(("b", 2), ("d", 4), ("a", 1), ("c", 3))
.toDF("letter", "number")
.select($"letter")
letters
.where($"number" > 1)
.show
这看起来与延迟加载有关,但是,我不确定这里到底发生了什么。
为什么可以在 where 子句中包含$"number",而只保留字母?
编辑 1 解释如下:
letters.explain(true)
== Parsed Logical Plan ==
'Project [unresolvedalias('letter, None)]
+- Project [_1#76942 AS letter#76955, _2#76943 AS number#76956]
+- LocalRelation [_1#76942, _2#76943]
== Analyzed Logical Plan ==
letter: string
Project [letter#76955]
+- Project [_1#76942 AS letter#76955, _2#76943 AS number#76956]
+- LocalRelation [_1#76942, _2#76943]
== Optimized Logical Plan ==
LocalRelation [letter#76955]
== Physical Plan ==
LocalTableScan [letter#76955]
【问题讨论】:
-
Spark 保留了血统。运行
letters.explain(true)。 -
谢谢@Andrew 我明白了,但是,我不知道它告诉了我多少。我会发布它。
-
不太容易理解,我承认。
标签: scala apache-spark apache-spark-sql