About the service
I develop data processing systems on Scala with Apache Spark and focus on two things above all: the numbers on output are correct and the task completes when data becomes ten times larger. I run batch and stream pipelines, ETL layers and heavy aggregations that grind billions of rows every day and don't crash at three in the morning. By default I write typed functional code — clean transformations, explicit schemas, no silent nulls in joins — so in a year I can calmly read the pipeline instead of being afraid to touch it.
Work starts with your real data and your real bottleneck, not a presentation. I profile where time and money actually go: key skew, heavy shuffle joins, explosion of small files, streaming falling behind source — and rewrite the hot path: partitioning and bucketing for queries, broadcast joins in place, window aggregations with correct watermarks, checkpointing so restart takes minutes not full reprocessing. I embed tasks into orchestration, add metrics and data quality checks and leave code your team develops itself. I work with Spark on YARN, Kubernetes or managed clusters, with Kafka and Parquet — fast because the layout fits the load, not because the cluster got bigger.
Work starts with your real data and your real bottleneck, not a presentation. I profile where time and money actually go: key skew, heavy shuffle joins, explosion of small files, streaming falling behind source — and rewrite the hot path: partitioning and bucketing for queries, broadcast joins in place, window aggregations with correct watermarks, checkpointing so restart takes minutes not full reprocessing. I embed tasks into orchestration, add metrics and data quality checks and leave code your team develops itself. I work with Spark on YARN, Kubernetes or managed clusters, with Kafka and Parquet — fast because the layout fits the load, not because the cluster got bigger.