【发布时间】:2017-06-08 15:13:53
【问题描述】:
所以我有这两个查询来实现相同的目标。使用 Spark-SQL。
查询 A:
SELECT * FROM inspex.defect_parquet a
INNER JOIN inspex.layer_parquet b
ON a.id = b.id
AND b.name = 'Example1';
查询 B:
SELECT * FROM inspex.defect_parquet
WHERE inspex.layer_scan_index
IN (SELECT layer_scan_index
FROM inspex.layer_parquet
WHERE name = 'Example1');
defect_parquet 是一个很大的表,layer_parquet 是一个几百 kb 的小表。
查询 B 比 A 快 80%。当我看到 Spark 如何运行它的解释时。这是查询A: 这是查询 B:
似乎 Spark 以不同的方式处理这些问题。有人可以向我解释一下吗?为什么查询 B 更快?
【问题讨论】:
-
非常有趣..通过第一次查看您的查询,您的第二个查询似乎将数据集过滤到最小,并传递给大数据选择(通过广播哈希连接,因此广播结果大小较小)。这就是它快速的原因。但令人惊讶的事实是加载 7 027 202 行它显示不同的时间(第一次查询 13.2 秒和 3.2 秒)对于大数据集,即
inspex.defect_parquet在你的 2 个统计图中
标签: hadoop apache-spark apache-spark-sql