Spark逻辑计划的sameResult方法返回false

时间:2018-12-11 07:09:20

标签: scala apache-spark apache-spark-sql

我有一个简单的查询,该查询在大型数据集上运行。为了避免连续执行,我缓存查询结果,并使用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版。

0 个答案:

没有答案