Искрайтесь, какой самый эффективный способ обработки данных - найти топ N без тасования и сортировки - PullRequest
1 голос
/ 25 октября 2019

Я нашел много ответов в StackOverflow, как найти лучшие записи N. ​​

Например:

df.filter("f==2").groupBy("a", "b",  "c").count().sort(desc("count"))
.limit(N)

Мне не нравится это решение, потому что:

  • сортировка / перестановка неэффективна
  • функция предела объединяет все данные раздела в один узел

Я нашел ответ в StackOverflow ( link1 , link2 ) (но у них НЕ есть пример для иллюстрации). Они используют следующую схему:

groupBy -> rdd > zipWithIndex 

, но я не совсем понимаю, как zipIndex может помочь мне здесь. Например:

df.filter("f==2").groupBy("a", "b",  "c").count().rdd.zipWithIndex().collect()

Результат выглядит следующим образом:

Array(
([1,2,3,100   ],0),
([3,2,1,200   ],1), 
...
)

индекс просто увеличивается ... поэтому я не уверен, что это решение ...

...