我有一个简单的查询,该查询在大型数据集上运行。为了避免连续执行,我缓存查询结果,并使用Spark优化逻辑计划作为缓存键,并比较缓存键,我在优化逻辑计划上使用sameResult
方法。
大多数查询都可以通过这种方式正常工作,但是我最近发现了一个简单的查询,其中sameResult()
方法返回false。
查询
SELECT (CASE WHEN COUNT(`table`.`sales_nr`) > 1 THEN COUNT(`table`.`sales_nr`) ELSE NULL END) AS `c` FROM `db`.`table` `table`;
生成的计划-
Aggregate [CASE WHEN (count(sales_nr#32) > 1) THEN count(sales_nr#32) ELSE null END AS a0#230L]
+- Project [sales_nr#32]
+- LogicalRDD [prod_name#29, sales_nr#32]
我不确定为什么上述简单计划的sameResult()方法不起作用。
以下是另一个运行良好的示例查询。
查询工作正常
SELECT (CASE WHEN `table`.`prod_name` = 'a' THEN 1 ELSE 0 END) AS `c` FROM `db`.`table` `table` group by `table`.`prod_name`;
火花计划
Aggregate [prod_name#29], [CASE WHEN (prod_name#29 = a) THEN 1 ELSE 0 END AS a0#260]
+- Project [prod_name#29]
+- LogicalRDD [prod_name#29, sales_nr#32]
我试图调试为什么第一个查询的逻辑计划无法使用sameResult()
进行匹配但找不到任何东西的问题。
如果有人可以帮助我确定问题,那就太好了。我正在使用Spark 2.1版。