我使用Spark 2.1.2.
我试图了解各种火花UI选项卡显示作为一个工作运行.我使用spark-shell --master local并执行以下join查询:
val df = Seq(
(55, "Canada", -1, "", 0),
(77, "Ontario", 55, "/55", 1),
(100, "Toronto", 77, "/55/77", 2),
(104, "Brampton", 100, "/55/77/100", 3)
).toDF("id", "name", "parentId", "path", "depth")
val dfWithPar = df.as("df1").
join(df.as("df2"), $"df1.parentId" === $"df2.Id", "leftouter").
select($"df1.*", $"df2.name" as "parentName")
dfWithPar.show
Run Code Online (Sandbox Code Playgroud)
这是物理查询计划:
== Physical Plan ==
*Project [Id#11, name#12, parentId#13, path#14, depth#15, name#25 AS parentName#63]
+- *BroadcastHashJoin [parentId#13], [Id#24], LeftOuter, BuildRight
:- LocalTableScan [Id#11, name#12, parentId#13, path#14, depth#15]
+- …Run Code Online (Sandbox Code Playgroud) 我正在使用 Spark 2.1.1。我有用 Spark SQL 编写的非常复杂的查询,我正在尝试对其进行优化。对于一个部分,我正在尝试使用广播连接。但即使我已经设置:
spark.sql.autoBroadcastJoinThreshold=1073741824
也就是 1GB,我看到 spark 生成的这部分执行的物理计划仍在使用 SortMergeJoin。您是否有任何见解为什么不使用广播连接,即使一侧的大小在 Spark UI -> SQL 选项卡上显示的要小得多(以 MB 为单位)?
我受影响部分的 SQL 代码部分如下所示:
-- Preceding SQL
(
SELECT /*+ BROADCAST (a) */ -- Size of a is within broadcast threshold as per UI
a.id,
big.gid
FROM
(SELECT DISTINCT(id) AS id FROM a_par WHERE gid IS NULL) a
JOIN
big ON (a.id=big.id)
)
-- Succeeding SQL
Run Code Online (Sandbox Code Playgroud)