What kind of partitioning are you exploring? GraphX actually has some built in
partitioning algorithms but if you are interested in spectral or hierarchical
methods you might want to look at Metis/Zoltan? There was some interest in
integrating Metis style algorithms in Spark (GraphX or
Actually another improvement would be to use something like compressed sparse
row encoding which can be used to store A and A^T relatively efficiently (I
think using 5 arrays instead of 6). There is an option to also be more cache
aware using something like a block compressed sparse row