Apache Spark- Partitioning and Shuffling, Parallelism Level, How to optimize these