title: How to have different schemas within parquet partitions
body: <p>I have json files read into data frame. The json can have a struct field messages that is specific to name like below.</p>
  
  <pre><code>Json1
  {
     "ts":"2020-05-17T00:00:03Z",
     "name":"foo",
     "messages":[
        {
           "a":1810,
           "b":"hello",
           "c":390
        }
     ]
  }
  
  Json2
  {
     "ts":"2020-05-17T00:00:03Z",
     "name":"bar",
     "messages":[
        {
           "b":"my",
           "d":"world"
        }
     ]
  }
  </code></pre>
  
  <p>when I read data from jsons into a Dataframe I get schema like below.</p>
  
  <pre><code>root
   |-- ts: string (nullable = true)
   |-- name: string (nullable = true)
   |-- messages: array (nullable = true)
   |    |-- element: struct (containsNull = true)
   |    |    |-- a: long (nullable = true)
   |    |    |-- b: string (nullable = true)
   |    |    |-- c: long (nullable = true)
   |    |    |-- d: string (nullable = true)
  </code></pre>
  
  <p>This is fine. Now when I save to parquet file partitioned by name, how can I have different schemas in foo and bar partitions?</p>
  
  <pre><code>path/name=foo
  root
   |-- ts: string (nullable = true)
   |-- name: string (nullable = true)
   |-- messages: array (nullable = true)
   |    |-- element: struct (containsNull = true)
   |    |    |-- a: long (nullable = true)
   |    |    |-- b: string (nullable = true)
   |    |    |-- c: long (nullable = true)
  
  path/name=bar
  root
   |-- ts: string (nullable = true)
   |-- name: string (nullable = true)
   |-- messages: array (nullable = true)
   |    |-- element: struct (containsNull = true)
   |    |    |-- b: string (nullable = true)
   |    |    |-- d: string (nullable = true)
  </code></pre>
  
  <p>I am fine if I get schema with all fields of foo and bar when I read data from root path. But when I read data from path/name=foo, I am expecting just foo schema.</p>