This document discusses optimizing large graph applications using Apache Spark with 4-5x performance improvements. It describes challenges working with large graphs containing billions of vertices and edges with data skew. Techniques used to address "buckets effect" and out of memory errors included separating huge and normal keys, splitting huge keys, and spilling data to disk. Lessons learned emphasized optimizing memory usage, understanding Spark internals, and avoiding misusage. Performance was improved from 2 days to around 10 hours by enabling broadcast joins and refining data interfaces.