Я нашел много ответов в 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),
...
)
индекс просто увеличивается ... поэтому я не уверен, что это решение ...