title: Trouble with schema using pyarrow.parquet ParquetDataset (how to force a particular schema)
body: <p>Let's explain the context:
  Someone gives me multiple parquet files obtain from multiple .csv files. I want to read all this parquet files and make a big dataset. For this I use pyarrow.parquet package.</p>
  
  <p>So, I have multiple parquet file (We could call them file1.pq ; file2.pq ; file3.pq). All the files have exactly the same structure: the same column name and the same content of column. But sometimes in all the rows of a column in one file the value is the same and egal to NA. In this particular case the function <code>dataset = pq.ParquetDataset(file_list)</code> fail because physical type change.</p>
  
  <p>lets make a visual exemple:</p>
  
  <pre><code>| File1.csv              |
  |-------------|-----|----|
  | Column Name | C1  | C2 |
  |-------------|-----|----|
  | Row 1       | YES | 10 |
  | Row 2       | NA  | 15 |
  | Row 3       | NO  | 9  |
  
  | File2.csv              |
  |-------------|-----|----|
  | Column Name | C1  | C2 |
  |-------------|-----|----|
  | Row 1       | NA  | 10 |
  | Row 2       | NA  | 15 |
  | Row 3       | NA  | 9  |
  
  | File2.csv              |
  |-------------|-----|----|
  | Column Name | C1  | C2 |
  |-------------|-----|----|
  | Row 1       | YES | 10 |
  | Row 2       | NA  | 15 |
  | Row 3       | NO  | 9  |
  </code></pre>
  
  <p>After conversion to parquet we have: </p>
  
  <pre><code>pq.ParquetFile("File1.pq").schema[1].physical_type = 'BYTE_ARRAY' --&gt; good !
  pq.ParquetFile("File1.pq").schema[2].physical_type = 'DOUBLE' --&gt; good !
  
  pq.ParquetFile("File2.pq").schema[1].physical_type = 'DOUBLE' --&gt; BAD !
  pq.ParquetFile("File2.pq").schema[2].physical_type = 'DOUBLE' --&gt; good !
  
  pq.ParquetFile("File3.pq").schema[1].physical_type = 'BYRE_ARRAY' --&gt; good!
  pq.ParquetFile("File3.pq").schema[2].physical_type = 'DOUBLE' --&gt; good !
  </code></pre>
  
  <p>I try to open each parquet file and modify column type with something like that :</p>
  
  <pre><code>for i in  np.arange(0,len(file_list)):
  
      if list_have_to_change[i] != []:
  
          df = pd.read_parquet(file_list[i])
  
          df[list_have_to_change[i]] = df[list_have_to_change[i]].astype(bytearray)
  
          df.to_parquet(COPIEPATH + "\\" + ntpath.basename(file_list[i]))
  
      else :
  
          shutil.move(file_list[i],COPIEPATH + "\\" + ntpath.basename(file_list[i]))
  </code></pre>
  
  <p>Where:</p>
  
  <p><code>file_list</code> contain all the parquet file</p>
  
  <p><code>list_have_to_change</code> is a list of a list of column name whose the name has to be change. In our example it was <code>[[],[C1],[]]</code>.</p>
  
  <p>But after <code>to_parquet()</code> methode schema return </p>
  
  <pre><code>BYTE_ARRAY for 1;
  
  DOUBLE for 2;
  
  BYTE_ARRAY for 3;
  </code></pre>
  
  <p>So it's change anything.</p>
  
  <p><strong><em>Question: How can I force schema when I save into parquet file or how can I use pq.ParquetDataset(file_list) with non coherent physical type ?</em></strong>  </p>
  
  <p>Hope that I was clear, thank you in advance for your help. </p>