Ще з самого початку існування нашої пиріжок спільноти, мені було цікаво зробити статистику повідомлень. Типу хто скільки за який період написав.
Функція не несе ніякого змісту, але ж цікаво дізнатися, хто найбільше зависає?
Коли робив бота для встановлення кастомних статусів, то вирішив заодно додати туди простеньку статистику.
Після підключення у чат один з учасників поцікавився, з якого періоду вона рахується? Чи можна отримати результати за весь час існування чату?
Я був лінивий, тому не робив ретроспективних підрахунків, але тут стало цікаво самому. Звучить як задача для біґдата інженера!
Телеграм має можливість експортувати історію чату в 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