See https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/execution/basicPhysicalOperators.scala#L80
Project operator preserves child's sort ordering but for output partitioning, it does not. I don't see any way projection would alter the partitioning of the child plan because rows are not passed across partitions when project happens (and if it does then it would also affect the sort ordering won't it ?). Am I missing something obvious here ? Thanks, Tejas