Как изменить & ldquo; организовать & rdquo; в спарклер?

Если я правильно понимаю, это group by с предложением having:

select value1
from t
group by value1
having min(value2) <> max(value2) 
0
задан user10998578 1 February 2019 в 03:19
поделиться

1 ответ

В теории это не должно иметь значения. Избыточные вызовы аранжировки должны быть удалены оптимизатором запросов:

my_df %>% 
  arrange(letters_col, numbers_col) %>% 
  arrange(letters_col, numbers_col) %>%  
  dbplyr::remote_query_plan()
== Physical Plan ==
*(1) Sort [letters_col#10 ASC NULLS FIRST, numbers_col#11 ASC NULLS FIRST], true, 0
+- Exchange rangepartitioning(letters_col#10 ASC NULLS FIRST, numbers_col#11 ASC NULLS FIRST, 4)
   +- InMemoryTableScan [letters_col#10, numbers_col#11]
         +- InMemoryRelation [letters_col#10, numbers_col#11], StorageLevel(disk, memory, deserialized, 1 replicas)
               +- Scan ExistingRDD[letters_col#10,numbers_col#11]

, однако, похоже, что несколько повторных сортировок в настоящий момент отключают оптимизатор (Spark 2.4.0, вы можете открыть a Билет JIRA для решения этой проблемы):

my_df %>% 
  arrange(letters_col, numbers_col) %>% 
  arrange(letters_col, numbers_col) %>%  
  arrange(letters_col, numbers_col) %>% 
  dbplyr::remote_query_plan()
== Physical Plan ==
*(2) Sort [letters_col#10 ASC NULLS FIRST, numbers_col#11 ASC NULLS FIRST], true, 0
+- Exchange rangepartitioning(letters_col#10 ASC NULLS FIRST, numbers_col#11 ASC NULLS FIRST, 4)
   +- *(1) Sort [letters_col#10 ASC NULLS FIRST, numbers_col#11 ASC NULLS FIRST], true, 0
      +- Exchange rangepartitioning(letters_col#10 ASC NULLS FIRST, numbers_col#11 ASC NULLS FIRST, 4)
         +- InMemoryTableScan [letters_col#10, numbers_col#11]
               +- InMemoryRelation [letters_col#10, numbers_col#11], StorageLevel(disk, memory, deserialized, 1 replicas)
                     +- Scan ExistingRDD[letters_col#10,numbers_col#11]

Как видите, Exchange rangepartitioning дважды включено в план выполнения.

Нет опции «отменить». Вы должны вернуться к my_df и начать заново.

0
ответ дан user10998578 1 February 2019 в 03:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: