Двойные эмоциональные качели
Эта история случилась, которая я устраивалась в Сбер. И до сих пор только избранные знали, как это произошло на самом деле)
🐌 Я параллельно общалась с двумя компаниями: первая удаленно (Mediascope), вторая в мск (Сбер)
Особенности первой позиции: удаленно, зп в 2 раза больше, да на стыке с де, есть ночные дежурства, после которых можно начать попозже
Особенности второй позиции: надо переезжать, зп в 3 раза больше, крутой вайб с лидом, чисто де задачи. Что меня больше всего впечатлило - лид попросил глянуть тестовое и самой написать, сколько времени понадобится на выполнение. Почему-то этот момент попал мне в самое сердечко💖
Мне очень понравилась вторая позиция, но было сильно давление сверху от мамы. Типо вот так возьму и оставлю ее одну...
🧐 Именно тогда я вступила датаинженерские чатики, чтобы поспрашивать, стоит ли переезжать, сколько стоило просить, как работается. Нашла похожий вопрос на хабре Q&A и написала автору на почту. Писала людям на линкедине из этих компаний, спрашивала про общее ощущение, про задачи. Даже нашла девчонку, которая до этого работала в моей текущей команде и увольнялась по тем же причинам, что и я))
В общем, скрепя сердце я приняла свою долю, отказала сберу и решила согласиться на удаленку в предстоящем вечернем созвоне. Но мне воткнули нож в спину, еще вчера они переманивали к себе, а уже сегодня выбрасывают на улицу🥲 Ничего не оставалось, как попытаться стереть память hr
🏃♂️ А дальше я уволилась, в тот же вечер села в поезд, с утра приехала в мск, съемной квартиры еще нет, оставила чемоданы и сумки на вокзале, на улице снег и минусовая температура, в пальто и демисезонных сапогах очень холодно, оформилась только к вечеру, успела на ежеквартальный фуршет...
А там мне сказали: "Мы тебя так ждали"💖
Happy end🎉
P.S. Мои переписки в датаинженерских чатиках, сомнения в переезде и обсуждения зп читал мой будущий лид. Я видела наши общие каналы, но понадеялась, что нормальные люди не мониторят там сутками) Спустя полгода сидя в ресторанчике, он мне все это рассказал👀 И что они в команде это тоже обсуждали. Я готова была провалиться сквозь землю
@data_engineerette
Эта история случилась, которая я устраивалась в Сбер. И до сих пор только избранные знали, как это произошло на самом деле)
Особенности первой позиции: удаленно, зп в 2 раза больше, да на стыке с де, есть ночные дежурства, после которых можно начать попозже
Особенности второй позиции: надо переезжать, зп в 3 раза больше, крутой вайб с лидом, чисто де задачи. Что меня больше всего впечатлило - лид попросил глянуть тестовое и самой написать, сколько времени понадобится на выполнение. Почему-то этот момент попал мне в самое сердечко
Мне очень понравилась вторая позиция, но было сильно давление сверху от мамы. Типо вот так возьму и оставлю ее одну...
В общем, скрепя сердце я приняла свою долю, отказала сберу и решила согласиться на удаленку в предстоящем вечернем созвоне. Но мне воткнули нож в спину, еще вчера они переманивали к себе, а уже сегодня выбрасывают на улицу
А там мне сказали: "Мы тебя так ждали"
Happy end
P.S. Мои переписки в датаинженерских чатиках, сомнения в переезде и обсуждения зп читал мой будущий лид. Я видела наши общие каналы, но понадеялась, что нормальные люди не мониторят там сутками) Спустя полгода сидя в ресторанчике, он мне все это рассказал
@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤56 23🤔1
Замена show partitions
Часто бывает, что нужно найти последнюю партицию и начать грузить данные со следующей. Пройдемся от банальных вариантов до особенно интересных
1️⃣
2️⃣
Другие 2 варианта подойдут для айсберга:
3️⃣
Это как аналог show partitions: идем в табличку и отбираем max(partition)
4️⃣
Пусть таблица партицируется по другим полям или не партицируется вообще. Тогда в момент загрузки можно проставить любое свойство:
Их может быть несколько, посмотрим на текущий список:
Сюда добавилось наше кастомное свойство:
Убрать свойство можно так:
Каждое изменение свойства будет создавать новый файл с метой - а это доп расходы на хранение и куча разных версий одной и той же таблицы. Поэтому сначала проанализируйте, какой метод будет подходить именно для ваших данных и ресурсов
@data_engineerette
Часто бывает, что нужно найти последнюю партицию и начать грузить данные со следующей. Пройдемся от банальных вариантов до особенно интересных
max(date) - самое ресурсозатратное, потому что нужно пробежаться по всей таблицеshow partitions - отличный способ, пробегаемся только по метаданнымДругие 2 варианта подойдут для айсберга:
raw.my_table.partitions - в айсберге есть много системных мета-таблиц, таблица с партициями выглядит так:
-RECORD 0-------------------------------------------
partition | {2025-03-29 00:00:00}
spec_id | 0
record_count | 7251
file_count | 1
total_data_file_size_in_bytes | 91062
position_delete_record_count | 0
position_delete_file_count | 0
equality_delete_record_count | 0
equality_delete_file_count | 0
last_updated_at | 2025-11-20 12:25:48.678
last_updated_snapshot_id | 5910543042911865752
only showing top 1 row
Это как аналог show partitions: идем в табличку и отбираем max(partition)
TBLPROPERTIES - тут обсудим подробнееПусть таблица партицируется по другим полям или не партицируется вообще. Тогда в момент загрузки можно проставить любое свойство:
ALTER TABLE raw.my_table
SET TBLPROPERTIES ('raw.last-date' = '2025-12-05');
Их может быть несколько, посмотрим на текущий список:
SHOW TBLPROPERTIES raw.my_table
Сюда добавилось наше кастомное свойство:
+-------------------------------+-----------------+
|key |value |
+-------------------------------+-----------------+
|current-snapshot-id |63675018113182479|
|format |iceberg/PARQUET |
|format-version |2 |
|raw.last-date |2025-12-05 |
|write.format.default |PARQUET |
|write.parquet.compression-codec|zstd |
+-------------------------------+-----------------+
Убрать свойство можно так:
ALTER TABLE raw.my_table
UNSET TBLPROPERTIES('raw.last-date');
Каждое изменение свойства будет создавать новый файл с метой - а это доп расходы на хранение и куча разных версий одной и той же таблицы. Поэтому сначала проанализируйте, какой метод будет подходить именно для ваших данных и ресурсов
@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
Поделилась тут интересной историей🤗
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from БАШНЯ
HARD SKILLS🫥
Сегодня разбираем реальный кейс о том, как один файл и смена инфраструктуры положили Nexus и остановили релизы👩💻
Делитесь этим постом с друзьями и пишите свои вопросы в комментарии✍️
Автор поста: @data_engineerette
#hardskills
Сегодня разбираем реальный кейс о том, как один файл и смена инфраструктуры положили Nexus и остановили релизы
Делитесь этим постом с друзьями и пишите свои вопросы в комментарии
Автор поста: @data_engineerette
#hardskills
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19👍13 5😭1
IPv4 vs IPv6
👀 Я раньше очень часто смотрела на таблицу с событиями пользователей из яндекс метрики. Там были столбцы ClientIP и ClientIP6:
ClientIP - IPv4 с которого было установлено TCP соединение с сервером
ClientIP6 - IPv6 с которого было установлено TCP соединение с сервером
Причем ClientIP6 никогда не было заполнено. И я все время задумывалась: а что там вообще должно лежать?
👩💻 И вот недавно я собиралась поиграть с европейскими ребятками. Они подняли свой собственный сервер, чтобы пинг был меньше. Скинули мне примерно такую ссылочку:
http://[2a02:8071:78f1:e662:416d:f389:ff96:442e]:8080/
Я в первый раз увидела, что такое IPv6 на самом деле)
Оказалось, что на их стороне роутером не поддерживается IPv4, а на моей стороне провайдером не поддерживается IPv6
🌎 Нашла интересную карту, где показано, что в США, Европе показатель доступности около 60%, Саудовская Аравия и Индия под 80%, пока у нас всего 3%. Представляете?
https://stats.labs.apnic.net/ipv6/
Google показывает 9%, но складывается примерно такая же картина:
https://www.google.com/intl/en/ipv6/statistics.html
@data_engineerette
ClientIP - IPv4 с которого было установлено TCP соединение с сервером
ClientIP6 - IPv6 с которого было установлено TCP соединение с сервером
Причем ClientIP6 никогда не было заполнено. И я все время задумывалась: а что там вообще должно лежать?
http://[2a02:8071:78f1:e662:416d:f389:ff96:442e]:8080/
Я в первый раз увидела, что такое IPv6 на самом деле)
Оказалось, что на их стороне роутером не поддерживается IPv4, а на моей стороне провайдером не поддерживается IPv6
https://stats.labs.apnic.net/ipv6/
Google показывает 9%, но складывается примерно такая же картина:
https://www.google.com/intl/en/ipv6/statistics.html
@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
😭14👍7❤2
Никогда не ешьте в одиночку и другие правила нетворкинга
🤓 Я увидела эту книгу в рекомендациях, заинтриговало название, но как будто она вообще не про нашу жизнь) Она про конец 20го века, Америку и ведение бизнеса
Кратко вот так:
📌 составить список будущих контактов
📌 познакомиться с ними
📌 периодически им всем звонить и приглашать на встречи
📌 быть оргом
📌 создать личный бренд и сообщество
📌 вертеться возле денег и в кругах сильных этого мира
В книге есть главное противоречие: автор сначала говорит, почему нужно бескорыстно помогать людям и не стремиться к крупной сделке, а потом - как знакомиться с людьми, которые помогут заключить эту самую крупную сделку
😧 А это уже совсем cringe moment: звонить людям на автоответчик во внерабочее время, чтобы не тратить время на общение, но в то же время напомнить о себе. «Если ты не хочешь разговаривать, зачем звонить?» - моя мама
Но я все-таки процитирую и прокомментирую некоторые мысли, которые мне понравились и которые хоть как-то можно привязать к нам
Про "силу слабых связей"
Сильные связи - это наши близкие друзья, родственники. И они посещают одни и те же места, как и мы, а слабые связи общаются с совершенно другими людьми
Про деньги
Тут вспоминается конкуренция на позицию джуна де. А ведь если этот кто-то не нашелся, значит, это вы?
Мама мне говорила то же самое) Чтобы я занялась репетиторством, потому что хорошо учусь, или преподавала сольфеджио, потому что хорошо получается, или фоткала свадьбы, потому что увлекаюсь фотографией. Но в этом мире существуют же хобби?
Про знакомства
Я недавно задумалась, что пора бы уже выучить пару анекдотов на русском и английском, подготовить смешную историю из своей жизни и топ-3 интересных факта о себе. Пока в этом списке (по моему мнению) - я участвовала в постановке оперы «Турандот» в гвардии принцессы. Норм для факта?
По сути это как выйти замуж за айтишника-тимлида или за айтишника-джуна, но с потенциалом
Про лайфхаки
1️⃣ Клонировать события - если есть люди, с которыми нужно встретиться, но время ограничено, то можно их всех пригласить в одно место, чтобы еще и познакомить их друг с другом. А еще кого-то пригласить пораньше, а с кем-то задержаться. По-моему, это гениально
2️⃣ Понравилась идея при знакомствах спрашивать любимый трек и пополнять свой плейлист
3️⃣ Говорить людям, что с ними очень приятно общаться
@data_engineerette
Кратко вот так:
В книге есть главное противоречие: автор сначала говорит, почему нужно бескорыстно помогать людям и не стремиться к крупной сделке, а потом - как знакомиться с людьми, которые помогут заключить эту самую крупную сделку
Но я все-таки процитирую и прокомментирую некоторые мысли, которые мне понравились и которые хоть как-то можно привязать к нам
Про "силу слабых связей"
Сильные связи - это наши близкие друзья, родственники. И они посещают одни и те же места, как и мы, а слабые связи общаются с совершенно другими людьми
Про деньги
Если то, что вы делаете, могут сделать многие, то обязательно найдется кто-то, кто готов будет сделать это за меньшую плату
Тут вспоминается конкуренция на позицию джуна де. А ведь если этот кто-то не нашелся, значит, это вы?
Творчество бесполезно, если от него нет практической отдачи. Постоянно думайте о том, каким образом это поможет заработать побольше денег
Мама мне говорила то же самое) Чтобы я занялась репетиторством, потому что хорошо учусь, или преподавала сольфеджио, потому что хорошо получается, или фоткала свадьбы, потому что увлекаюсь фотографией. Но в этом мире существуют же хобби?
Про знакомства
Знакомясь с новым человеком, будьте готовы ему что-то рассказать. Все, что вы прочли и узнали в своей жизни, ничего не значит, если люди не считают вас интересным собеседником
Я недавно задумалась, что пора бы уже выучить пару анекдотов на русском и английском, подготовить смешную историю из своей жизни и топ-3 интересных факта о себе. Пока в этом списке (по моему мнению) - я участвовала в постановке оперы «Турандот» в гвардии принцессы. Норм для факта?
Не гоняйтесь за лидерами. Лучше попробуйте найти лидеров завтрашнего дня
По сути это как выйти замуж за айтишника-тимлида или за айтишника-джуна, но с потенциалом
Про лайфхаки
@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17 8💅4👍3
Подъехала задачка!
На картинке a, b - исходные таблицы, res - итоговая
Нужно написать один запрос, который вернет нужный результат в обоих случаях
@data_engineerette
На картинке a, b - исходные таблицы, res - итоговая
Нужно написать один запрос, который вернет нужный результат в обоих случаях
@data_engineerette
🔥11❤3🌚2💅1
Худшие фейлы в DE
Наткнулась на тред в реддите, где обсуждались фейлы на работе. Мне больше всего зашли 2 истории, они такие смешные и страшные одновременно🤯
1️⃣ Стриминг писал в то же самое место, откуда и читал. Это все длилось год, поэтому накопилось сотни триллионов миллиардов версий документов. Проблема обнаружилась, только когда к ним пришел AWS и пожаловался на проблемы в своих системах
Неужели за этот год они не заметили, как эти пайплайны работают все медленнее и медленнее, почему такая высокая нагрузка и что в таблицах кучи дублей?
2️⃣ DE понизил уровень логирования до DEBUG, и это привело к расходам в 100к долларов за неделю
Кажется, теперь я знаю способ, как можно уменьшить расходы компании. Ничего не логировать😁
💰 Мы сейчас тоже переходим в эру FinOps. Будем пугать аналитиков, чтобы писали оптимальные запросы 😁
А у вас было что-то супер серьезное?
Ссылка на тред
@data_engineerette
Наткнулась на тред в реддите, где обсуждались фейлы на работе. Мне больше всего зашли 2 истории, они такие смешные и страшные одновременно
Неужели за этот год они не заметили, как эти пайплайны работают все медленнее и медленнее, почему такая высокая нагрузка и что в таблицах кучи дублей?
Кажется, теперь я знаю способ, как можно уменьшить расходы компании. Ничего не логировать
А у вас было что-то супер серьезное?
Ссылка на тред
@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
Reddit
From the dataengineering community on Reddit
Explore this post and more from the dataengineering community
❤11 7👍6🔥2
max_by/min_by
Узнала про прикольные функции, они заменяют оконку/CTE на одно поле
Пример - вывести имя сотрудника с максимальным стажем по каждому департаменту
И все! Не надо никаких row_number = 1
В Spark SQL можно еще и фильтр набросить:
А в Trino еще можно собрать массив топ-n в убывающем порядке:
Аналог в ClickHouse - argMax
@data_engineerette
Узнала про прикольные функции, они заменяют оконку/CTE на одно поле
Пример - вывести имя сотрудника с максимальным стажем по каждому департаменту
result = df.groupBy("department").agg(
F.max_by("name", "years")
)
И все! Не надо никаких row_number = 1
В Spark SQL можно еще и фильтр набросить:
spark.sql("""
select
department,
max_by(name, years) filter (where name is not null)
from employees
group by department
""")
А в Trino еще можно собрать массив топ-n в убывающем порядке:
select
department,
max_by(name, years) AS top_employee,
max_by(name, years, 2) AS top_2_employees
from employees
group by department
Аналог в ClickHouse - argMax
@data_engineerette
👍38🔥14 5❤3
Влияние ИИ на маркетинг
🔝 Раньше бренды пытались быть в топе выдачи в поисковике, участвовали в аукционах, чтобы выбить себе первые места
Когда я работала в маркетинге, наши аналитики очень часто обсуждали органический трафик. Это пользаки, которые перешли на сайт из поиска, а не рекламного баннера. Помню, как они заходили в браузер с разных устройств и с инкогнито, чтобы перепроверить актуальную позицию. Мы парсили запросы по ключевым словам с упоминанем бренда и без, и это все мониторилось на дэшах
💻 Сейчас же многие пользаки читают нейроответы (я в том числе) и уже там находят решение. При этом бренды остаются не в курсе, в позитивном или негативном контексте они там упоминаются
По-моему, это открывает большое поле для манипулирования нашим выбором и сознанием) Нужно всего лишь чекнуть, какие источники анализирует нейронка, опубликовать на этих сайтах "какой у нас крутой продукт" и (вуаля!) нейронка говорит, что у вас самый лучший продукт😁
Уже появились инструменты, которые парсят нейроответы, анализируют мнение топовых нейросеток за вас, включая тон упоминаний, сравнение с конкурентами и т.д.
✏️ Теперь бренды меняют подходы, чтобы нейронка их чаще упоминала в своих ответах. Они покупают пресс-релизы, где будет в позитивном ключе описываться компания, указывают точные реквизиты, чтобы было понятно, о какой компании идет речь, и в целом оптимизируют сайты под нейропоиск
❌ SEO (Search Engine Optimization)
✅ AEO (Answer Engine Optimization)
✅ GEO (Generative Engine Optimization)
Это целая наука, меня прямо сильно затянуло в этом покопаться
@data_engineerette
Когда я работала в маркетинге, наши аналитики очень часто обсуждали органический трафик. Это пользаки, которые перешли на сайт из поиска, а не рекламного баннера. Помню, как они заходили в браузер с разных устройств и с инкогнито, чтобы перепроверить актуальную позицию. Мы парсили запросы по ключевым словам с упоминанем бренда и без, и это все мониторилось на дэшах
По-моему, это открывает большое поле для манипулирования нашим выбором и сознанием) Нужно всего лишь чекнуть, какие источники анализирует нейронка, опубликовать на этих сайтах "какой у нас крутой продукт" и (вуаля!) нейронка говорит, что у вас самый лучший продукт
Уже появились инструменты, которые парсят нейроответы, анализируют мнение топовых нейросеток за вас, включая тон упоминаний, сравнение с конкурентами и т.д.
Это целая наука, меня прямо сильно затянуло в этом покопаться
@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤4
pre-commit
Про эту штуку мне рассказал наш девопс. Короче, можно настроить у себя на ноуте, чтобы перед каждым коммитом прогонялись линтеры, форматтеры, другие легковесные чекеры
Шаг 1. В корне репки создаем файлик .pre-commit-config.yaml и добавляем нужные модули:
Шаг 2. Устанавливаем pre-commit
Все хуки лежат в папке .git/hooks/
Шаг 3. Создаем свой файлик и коммитим
При первой попытке запустятся форматтеры и исправят все ошибки:
На второй попытке файлик будет закомичен:
Больше примеров
@data_engineerette
Про эту штуку мне рассказал наш девопс. Короче, можно настроить у себя на ноуте, чтобы перед каждым коммитом прогонялись линтеры, форматтеры, другие легковесные чекеры
Шаг 1. В корне репки создаем файлик .pre-commit-config.yaml и добавляем нужные модули:
repos:
- repo: https://github.com/sqlfluff/sqlfluff
rev: 4.0.4
hooks:
- id: sqlfluff-fix
args: [
--config, tables/.sqlfluff
]
Шаг 2. Устанавливаем pre-commit
brew install pre-commit
pre-commit install
Все хуки лежат в папке .git/hooks/
Шаг 3. Создаем свой файлик и коммитим
При первой попытке запустятся форматтеры и исправят все ошибки:
git commit
sqlfluff-fix...............Failed
- hook id: sqlfluff-fix
- files were modified by this hook
== finding fixable violations ==
== [tables/test_table.sql] FAIL
L: 1 | P: 1 | CP01 | Keywords must be upper case. [capitalisation.keywords]
...
== [tables/test_table.sql] FIXED
На второй попытке файлик будет закомичен:
git commit
1 file changed, 1 insertion(+), 1 deletion(-)
create mode 100644 tables/test_table.sql
Больше примеров
@data_engineerette
👍30🔥11❤3🌚1
AI в OpenSource
🤓 У нас была проблема: аналитики переписывают свои скрипты с синтаксиса Trino на Spark, и в DDL они постоянно забывают поменять varchar на string. В итоге скрипты падают, только когда уже все вмержено в мастер (не круто)
Линтер при этом не отлавливал такие кейсы, потому что varchar в диалекте спарка тоже существует, но с указанием длины: varchar(10)
🤔 Я покопалась в коде линтера, нашла проблему и завела issue на гитхабе
Через 2 недели приходит отбивка, что все сделано. Я смотрю в PR: Copilot внес правки, Greptile все проревьюил🔥 🔥
У кого так же в проектах настроено?
PR: https://github.com/sqlfluff/sqlfluff/pull/7459
@data_engineerette
Линтер при этом не отлавливал такие кейсы, потому что varchar в диалекте спарка тоже существует, но с указанием длины: varchar(10)
Через 2 недели приходит отбивка, что все сделано. Я смотрю в PR: Copilot внес правки, Greptile все проревьюил
У кого так же в проектах настроено?
PR: https://github.com/sqlfluff/sqlfluff/pull/7459
@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
SparkSQL: Enforce mandatory length for VARCHAR/CHAR/CHARACTER by Copilot · Pull Request #7459 · sqlfluff/sqlfluff
SparkSQL requires VARCHAR, CHAR, and CHARACTER types to specify a length parameter, but SQLFluff accepted them without length, causing SQL to pass linting but fail at execution with DATATYPE_MISSIN...
👍15 11😭3
Iceberg — это must have?
Вы еще не замечали, что становится больше вакансий, где айсберг уже требуют?
С одной стороны, если посмотреть на hh, то вакансий с айсбергом всего около 5%. Но, с другой стороны, в последнее время на меня выходят именно с формулировкой обязательности
Собрала список компаний, которые хотя бы частично уже живут на Data Lakehouse:
📌 Ламода
📌 Магнит
📌 Альфа
📌 М.Видео
📌 МТС
📌 Сбер
📌 X5
📌 Лента
📌 Золотое яблоко (Delta Lake)
А вот Озон по состоянию на прошлый год планировал идти в Data Mesh, чем в Data Lakehouse
Что вообще думаете?
@data_engineerette
Вы еще не замечали, что становится больше вакансий, где айсберг уже требуют?
С одной стороны, если посмотреть на hh, то вакансий с айсбергом всего около 5%. Но, с другой стороны, в последнее время на меня выходят именно с формулировкой обязательности
Собрала список компаний, которые хотя бы частично уже живут на Data Lakehouse:
А вот Озон по состоянию на прошлый год планировал идти в Data Mesh, чем в Data Lakehouse
Что вообще думаете?
@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
Датаклассы
Наконец-то спустя год дошли руки написать про датаклассы🌷 Меня спросили на собесе в ламоду, и тогда я про них либо краем уха слышала, либо вообще не слышала. Но точно не использовала. Посмотрим, что с ними можно делать
Зачем?
Датакласс описывает данные, но без кучи лишних методов. Он сам вместо нас добавит
Как создать?
Чтобы датаклассы заработали, нужно их импорнуть и добавить в виде аннотации:
Готово! Никакие методы добавлять не нужно
Как использовать?
Другие фишки
Запрещаем менять поля:
Задаем дефолтные значения:
Чуть подробнее можно прочитать в короткой статье
@data_engineerette
Наконец-то спустя год дошли руки написать про датаклассы
Зачем?
Датакласс описывает данные, но без кучи лишних методов. Он сам вместо нас добавит
__init__, __repr__, __eq__ по дефолту. Набор методов можем сами менять с помощью флаговКак создать?
Чтобы датаклассы заработали, нужно их импорнуть и добавить в виде аннотации:
from dataclasses import dataclass
@dataclass
class SparkParams:
"""Dataclass для параметров spark-submit команды."""
name: str
deploy_mode: str
driver_cores: int
driver_memory: str
executor_cores: int
executor_memory: str
num_executors: int
Готово! Никакие методы добавлять не нужно
Как использовать?
spark_params = SparkParams("test_app", "cluster", 2, "4g", 4, "32g", 8)
Другие фишки
Запрещаем менять поля:
@dataclass(frozen=True)
Задаем дефолтные значения:
@dataclass
class Team:
description: str | None = None
emails: list[str] = field(default_factory=list) # для list/dict/set
Чуть подробнее можно прочитать в короткой статье
@data_engineerette
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26 12❤5