Использование mapPartitions, чтобы избежать перемешивания с групповым и счетчиком - PullRequest
0 голосов
/ 01 октября 2019

У меня есть следующие данные, где мне нужно сгруппировать данные по ключу и посчитать число по ключу, чтобы отслеживать показатели. Я могу использовать groupBy и подсчитать для этой группы, но это требует некоторой случайности. Можно ли обойтись без шаффла?

ID,TempID,PermanantID
----------

xxx, abcd, 12345

xxx, efg, 1345

xxx, ijk, 1534

xxx, lmn, 13455

xxx, null, 12345

xxx, axg, null

yyy, abcd, 12345

yyy, efg, 1345

yyy, ijk, 1534

zzz, lmn, 13455

zzz, abc, null

вывод должен быть

ID Count1 Count2
----------
XXX 5 5

YYY 3 3

ZZZ 2 1

Я могу сделать это с помощью groupBy и считать

dataframe.groupby("ID").agg(col("TempID").as("Count1"),count(col("PermanantID").as("Count2"))

можем ли мы это сделатьиспользуя mapPartition?

1 Ответ

1 голос
/ 01 октября 2019

Этот вопрос, хотя и понятен, имеет недостатки.

mapPartitions нельзя использовать непосредственно на кадре данных, но на RDD и наборе данных.

Более того, как насчет разделения и перестановки, которые требовались додля вызова mapPartitions? В противном случае результаты будут неверными. Там нет упоминания о гарантии порядка данных первоначально в вопросе.

Следовательно, я бы положился на подход groupBy, как постулируется. Это иллюзия - думать, что в приложении не требуется перемешивание, скорее мы можем уменьшить его, это и есть цель.

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