[SPARK-3007][SQL]Add "Dynamic Partition" support to Spark Sql hive

the detail please refer the comment of https://issues.apache.org/jira/browse/SPARK-3007
OK, I finally understand the trick here... Although `dynamicPartPath` is defined out of the closure,  the `dynamicPartPath` in this line and the the one used in `writeToFile2` are the same instance for a single row as the two iterators are pipelined.

I admit I had never thought that we can use Spark in this way :) But this is too hacky to follow. I'd suggest to define `dynamicPartPath` within this closure and pass it as part of the output this RDD. Namely, change [this line](https://github.com/apache/spark/pull/1919/files#diff-d579db9a8f27e0bbef37720ab14ec3f6L200) to:

```scala
serializer.serialize(outputData, standardOI) -> dynamicPartPath
```

Then make `writeToFile2` receive an `Iterator[(Writable, String)]` instead of an `Iterator[Writable]`.