A scalable framework is developed to allocate radio resources across a large number of densely deployed small cells with given traffic statistics on a slow timescale. Joint user association and spectrum allocation is first formulated as a convex optimization problem by dividing the spectrum among all possible transmission patterns of active access points (APs). To improve scalability with the number of APs, the problem is reformulated using local patterns of interfering APs. To maintain global consistency among local patterns, inter-cluster interaction is characterized as hyper-edges in a hyper-graph with nodes corresponding to neighborhoods of APs. A scalable solution is obtained by iteratively solving a convex optimization problem for bandwidth allocation with reduced complexity and constructing a global spectrum allocation using hyper-graph coloring. Numerical results demonstrate the proposed solution for a network with 100 APs and several hundred user equipments. For a given quality of service (QoS), the proposed scheme can increase the network capacity several fold compared to assigning each user to the strongest AP with full-spectrum reuse.