Метод sameResult логического плана Spark возвращает false - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть простой запрос, который выполняется по большому набору данных.Чтобы избежать последовательного выполнения, я кеширую результат запроса и использую оптимизированный по искру логический план в качестве ключа кеша, а для сравнения ключей кеша я использую метод 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`;

Sparkplan

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...