Біґдата у терміналі

Ще з самого початку існування нашої пиріжок спільноти, мені було цікаво зробити статистику повідомлень. Типу хто скільки за який період написав.

Функція не несе ніякого змісту, але ж цікаво дізнатися, хто найбільше зависає?

Коли робив бота для встановлення кастомних статусів, то вирішив заодно додати туди простеньку статистику.

Після підключення у чат один з учасників поцікавився, з якого періоду вона рахується? Чи можна отримати результати за весь час існування чату?

Я був лінивий, тому не робив ретроспективних підрахунків, але тут стало цікаво самому. Звучить як задача для біґдата інженера!

Телеграм має можливість експортувати історію чату в JSON. Я почав піднімати Spark-кластер на EMR через пачку Terraform шаблонів щоб зробити groupBy("name").count, та запустив експорт бо він займає деякий час. На виході отримав файл на 100 мегабайт. Останній раз чат чистився в кінці 2020 року, тому історія збереглась за півтора роки.

Я вже був готовий робити aws s3 cp chat.json s3://big-data-bucket та заряджати кластер на роботу, але потім згадав що біґдату можна прогнати баш скріптами.

За пару сек пошуків зібрав команду cat chat.json | jq '.messages[].from' | sort | uniq -c | sort -nr яка моментально порахувала мені топ. Воно там не фільтрує сервісні повідомлення, але то вже хай читач фіксить.

EMR кластер ще навіть не піднявся, тому я швиденько його загасив.

А тепер уявіть скільки грошей недоотримають AWS, Databricks, GCP, Azure, Snowflake та інші контори, якщо люди будуть трохи думати головою перед тим як запускати m5d.8xlarge інстанси?

P.S.: виявилося що в топі я на другому місці. Ганьба—скільки часу змарновано!

P.P.S.: порівнювати зі спарком я вже не став, бо то би зайняло трохи більше часу. Для тих кому цікаво, є класична стаття «Command-line Tools can be 235x Faster than your Hadoop Cluster».

P.P.P.S.: за ідею підрахунку статистики дякую нашому активному учаснику, пану наглядачу Психотронної в'язниці.


Сподобалось? Долучайтеся до мого телеграм каналу: https://t.me/full_of_hatred