[ 
https://issues.apache.org/jira/browse/SPARK-6016?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Cheng Lian resolved SPARK-6016.
-------------------------------
       Resolution: Fixed
    Fix Version/s: 1.3.0

Issue resolved by pull request 4775
[https://github.com/apache/spark/pull/4775]

> Cannot read the parquet table after overwriting the existing table when 
> spark.sql.parquet.cacheMetadata=true
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: SPARK-6016
>                 URL: https://issues.apache.org/jira/browse/SPARK-6016
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>            Reporter: Yin Huai
>            Priority: Blocker
>             Fix For: 1.3.0
>
>
> saveAsTable is fine and seems we have successfully deleted the old data and 
> written the new data. However, when reading the newly created table, an error 
> will be thrown.
> {code}
> Error in SQL statement: java.lang.RuntimeException: 
> java.lang.RuntimeException: could not merge metadata: key 
> org.apache.spark.sql.parquet.row.metadata has conflicting values: 
> at 
> parquet.hadoop.api.InitContext.getMergedKeyValueMetaData(InitContext.java:67)
>       at parquet.hadoop.api.ReadSupport.init(ReadSupport.java:84)
>       at 
> org.apache.spark.sql.parquet.FilteringParquetRowInputFormat.getSplits(ParquetTableOperations.scala:469)
>       at 
> parquet.hadoop.ParquetInputFormat.getSplits(ParquetInputFormat.java:245)
>       at 
> org.apache.spark.sql.parquet.ParquetRelation2$$anon$1.getPartitions(newParquet.scala:461)
>       ...
> {code}
> If I set spark.sql.parquet.cacheMetadata to false, it's fine to query the 
> data. 
> Note: the newly created table needs to have more than one file to trigger the 
> bug (if there is only a single file, we will not need to merge metadata). 
> To reproduce it, try...
> {code}
> import org.apache.spark.sql.SaveMode
> import sqlContext._
> sql("drop table if exists test")
> val df1 = sqlContext.jsonRDD(sc.parallelize((1 to 10).map(i => 
> s"""{"a":$i}"""), 2)) // we will save to 2 parquet files.
> df1.saveAsTable("test", "parquet", SaveMode.Overwrite)
> sql("select * from test").collect.foreach(println) // Warm the 
> FilteringParquetRowInputFormat.footerCache
> val df2 = sqlContext.jsonRDD(sc.parallelize((1 to 10).map(i => 
> s"""{"b":$i}"""), 4)) // we will save to 4 parquet files.
> df2.saveAsTable("test", "parquet", SaveMode.Overwrite)
> sql("select * from test").collect.foreach(println)
> {code}
> For this example, we have two outdated footers for df1 in footerCache and 
> since we have four parquet files for the new test table, we picked up 2 new 
> footers for df2. Then, we hit the bug.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@spark.apache.org
For additional commands, e-mail: issues-h...@spark.apache.org

Reply via email to