Skip to content

Commit 0e0fb9f

Browse files
authored
[SEDONA-699] Fix issue with not closing parquet files. (#1749)
* Fix issue with not closing parquet files. * Fix the geoparquet footer reader. * Fix the geoparquet footer reader.
1 parent b90c96e commit 0e0fb9f

3 files changed

Lines changed: 24 additions & 15 deletions

File tree

spark/spark-3.3/src/main/scala/org/apache/spark/sql/execution/datasources/v2/geoparquet/metadata/GeoParquetMetadataPartitionReaderFactory.scala

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ package org.apache.spark.sql.execution.datasources.v2.geoparquet.metadata
2020

2121
import org.apache.hadoop.conf.Configuration
2222
import org.apache.hadoop.fs.Path
23+
import org.apache.parquet.ParquetReadOptions
24+
import org.apache.parquet.format.converter.ParquetMetadataConverter
2325
import org.apache.parquet.hadoop.ParquetFileReader
2426
import org.apache.parquet.hadoop.util.HadoopInputFile
2527
import org.apache.spark.broadcast.Broadcast
@@ -67,11 +69,11 @@ object GeoParquetMetadataPartitionReaderFactory {
6769
partitionedFile: PartitionedFile,
6870
readDataSchema: StructType): Iterator[InternalRow] = {
6971
val filePath = partitionedFile.filePath
70-
val metadata = ParquetFileReader
71-
.open(HadoopInputFile.fromPath(new Path(filePath), configuration))
72-
.getFooter
73-
.getFileMetaData
74-
.getKeyValueMetaData
72+
73+
val footer = ParquetFileReader
74+
.readFooter(configuration, new Path(filePath), ParquetMetadataConverter.NO_FILTER)
75+
76+
val metadata = footer.getFileMetaData.getKeyValueMetaData
7577
val row = GeoParquetMetaData.parseKeyValueMetaData(metadata) match {
7678
case Some(geo) =>
7779
val geoColumnsMap = geo.columns.map { case (columnName, columnMetadata) =>

spark/spark-3.4/src/main/scala/org/apache/spark/sql/execution/datasources/v2/geoparquet/metadata/GeoParquetMetadataPartitionReaderFactory.scala

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.apache.spark.sql.execution.datasources.v2.geoparquet.metadata
2020

2121
import org.apache.hadoop.conf.Configuration
22+
import org.apache.parquet.ParquetReadOptions
2223
import org.apache.parquet.hadoop.ParquetFileReader
2324
import org.apache.parquet.hadoop.util.HadoopInputFile
2425
import org.apache.spark.broadcast.Broadcast
@@ -66,12 +67,14 @@ object GeoParquetMetadataPartitionReaderFactory {
6667
configuration: Configuration,
6768
partitionedFile: PartitionedFile,
6869
readDataSchema: StructType): Iterator[InternalRow] = {
70+
val inputFile = HadoopInputFile.fromPath(partitionedFile.toPath, configuration)
71+
val inputStream = inputFile.newStream()
72+
73+
val footer = ParquetFileReader
74+
.readFooter(inputFile, ParquetReadOptions.builder().build(), inputStream)
75+
6976
val filePath = partitionedFile.toPath.toString
70-
val metadata = ParquetFileReader
71-
.open(HadoopInputFile.fromPath(partitionedFile.toPath, configuration))
72-
.getFooter
73-
.getFileMetaData
74-
.getKeyValueMetaData
77+
val metadata = footer.getFileMetaData.getKeyValueMetaData
7578
val row = GeoParquetMetaData.parseKeyValueMetaData(metadata) match {
7679
case Some(geo) =>
7780
val geoColumnsMap = geo.columns.map { case (columnName, columnMetadata) =>

spark/spark-3.5/src/main/scala/org/apache/spark/sql/execution/datasources/v2/geoparquet/metadata/GeoParquetMetadataPartitionReaderFactory.scala

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.apache.spark.sql.execution.datasources.v2.geoparquet.metadata
2020

2121
import org.apache.hadoop.conf.Configuration
22+
import org.apache.parquet.ParquetReadOptions
2223
import org.apache.parquet.hadoop.ParquetFileReader
2324
import org.apache.parquet.hadoop.util.HadoopInputFile
2425
import org.apache.spark.broadcast.Broadcast
@@ -66,12 +67,15 @@ object GeoParquetMetadataPartitionReaderFactory {
6667
configuration: Configuration,
6768
partitionedFile: PartitionedFile,
6869
readDataSchema: StructType): Iterator[InternalRow] = {
70+
71+
val inputFile = HadoopInputFile.fromPath(partitionedFile.toPath, configuration)
72+
val inputStream = inputFile.newStream()
73+
74+
val footer = ParquetFileReader
75+
.readFooter(inputFile, ParquetReadOptions.builder().build(), inputStream)
76+
6977
val filePath = partitionedFile.toPath.toString
70-
val metadata = ParquetFileReader
71-
.open(HadoopInputFile.fromPath(partitionedFile.toPath, configuration))
72-
.getFooter
73-
.getFileMetaData
74-
.getKeyValueMetaData
78+
val metadata = footer.getFileMetaData.getKeyValueMetaData
7579
val row = GeoParquetMetaData.parseKeyValueMetaData(metadata) match {
7680
case Some(geo) =>
7781
val geoColumnsMap = geo.columns.map { case (columnName, columnMetadata) =>

0 commit comments

Comments
 (0)