diff --git a/StandardPlugin/ADAPTParquet.cs b/StandardPlugin/ADAPTParquet.cs index 2f28c4e..1145377 100644 --- a/StandardPlugin/ADAPTParquet.cs +++ b/StandardPlugin/ADAPTParquet.cs @@ -44,39 +44,36 @@ public void Write(string outputFile) }; var geometadata = GeoParquet.GeoMetadata.GetGeoMetadata(geoColumn); - using (var fs = File.Create(outputFile)) + using (var writer = new ParquetFileWriter(outputFile, dataFields.ToArray(), Compression.Zstd, keyValueMetadata: geometadata)) { - using (var writer = new ParquetFileWriter(fs, dataFields.ToArray(), keyValueMetadata: geometadata)) + int startIndex = 0; + int remainingRowGroups = ColumnData.Geometries.Count / RowGroupSize; + if (ColumnData.Geometries.Count % RowGroupSize > 0) { - int startIndex = 0; - int remainingRowGroups = ColumnData.Geometries.Count / RowGroupSize; - if (ColumnData.Geometries.Count % RowGroupSize > 0) - { - remainingRowGroups++; - } - while (remainingRowGroups > 0) + remainingRowGroups++; + } + while (remainingRowGroups > 0) + { + using (RowGroupWriter rg = writer.AppendRowGroup()) { - using (RowGroupWriter rg = writer.AppendRowGroup()) + if (ColumnData.Timestamps.Any()) + { + var timestampWriter = rg.NextColumn().LogicalWriter(); + var timestamps = ColumnData.Timestamps.Skip(startIndex).Take(RowGroupSize); + timestampWriter.WriteBatch(timestamps.Select(t => t.ToString("O", CultureInfo.InvariantCulture)).ToArray()); ; + } + foreach (var doubleColumn in ColumnData.Columns) { - if (ColumnData.Timestamps.Any()) - { - var timestampWriter = rg.NextColumn().LogicalWriter(); - var timestamps = ColumnData.Timestamps.Skip(startIndex).Take(RowGroupSize); - timestampWriter.WriteBatch(timestamps.Select(t => t.ToString("O", CultureInfo.InvariantCulture)).ToArray()); ; - } - foreach (var doubleColumn in ColumnData.Columns) - { - var doubleWriter = rg.NextColumn().LogicalWriter(); - var values = doubleColumn.Values.Skip(startIndex).Take(RowGroupSize); - doubleWriter.WriteBatch(values.ToArray()); - } - var geometries = ColumnData.Geometries.Skip(startIndex).Take(RowGroupSize); - var geometryWriter = rg.NextColumn().LogicalWriter(); - geometryWriter.WriteBatch(geometries.ToArray()); + var doubleWriter = rg.NextColumn().LogicalWriter(); + var values = doubleColumn.Values.Skip(startIndex).Take(RowGroupSize); + doubleWriter.WriteBatch(values.ToArray()); } - startIndex += RowGroupSize; - remainingRowGroups--; + var geometries = ColumnData.Geometries.Skip(startIndex).Take(RowGroupSize); + var geometryWriter = rg.NextColumn().LogicalWriter(); + geometryWriter.WriteBatch(geometries.ToArray()); } + startIndex += RowGroupSize; + remainingRowGroups--; } } }