@@ -69,9 +69,9 @@ class ParquetWriter::Impl {
6969 std::shared_ptr<::arrow::KeyValueMetadata> metadata =
7070 ::arrow::key_value_metadata (options.properties);
7171
72- ICEBERG_ASSIGN_OR_RAISE (auto output_stream , OpenOutputStream (options));
73- auto file_writer = ::parquet::ParquetFileWriter::Open (
74- std::move (output_stream), schema_node, writer_properties, metadata);
72+ ICEBERG_ASSIGN_OR_RAISE (output_stream_ , OpenOutputStream (options));
73+ auto file_writer = ::parquet::ParquetFileWriter::Open (output_stream_, schema_node,
74+ writer_properties, metadata);
7575 ICEBERG_ARROW_RETURN_NOT_OK (::parquet::arrow::FileWriter::Make (
7676 pool_, std::move (file_writer), arrow_schema_, arrow_writer_properties, &writer_));
7777
@@ -89,10 +89,13 @@ class ParquetWriter::Impl {
8989
9090 // Close the writer and release resources
9191 Status Close () {
92- if (writer_ != nullptr ) {
93- ICEBERG_ARROW_RETURN_NOT_OK (writer_->Close ());
94- writer_.reset ();
92+ if (writer_ == nullptr ) {
93+ return {}; // Already closed
9594 }
95+
96+ ICEBERG_ARROW_RETURN_NOT_OK (writer_->Close ());
97+ writer_.reset ();
98+ ICEBERG_ARROW_RETURN_NOT_OK (output_stream_->Close ());
9699 return {};
97100 }
98101
@@ -105,6 +108,8 @@ class ParquetWriter::Impl {
105108 std::shared_ptr<::arrow::Schema> arrow_schema_;
106109 // Parquet file writer to write ArrowArray.
107110 std::unique_ptr<::parquet::arrow::FileWriter> writer_;
111+ // The output stream to write Parquet file.
112+ std::shared_ptr<::arrow::io::OutputStream> output_stream_;
108113};
109114
110115ParquetWriter::~ParquetWriter () = default ;
@@ -139,7 +144,7 @@ std::vector<int64_t> ParquetWriter::split_offsets() {
139144 return {};
140145}
141146
142- void ParquetWriter::Register () {
147+ void RegisterWriter () {
143148 static WriterFactoryRegistry parquet_writer_register (
144149 FileFormatType::kParquet , []() -> Result<std::unique_ptr<Writer>> {
145150 return std::make_unique<ParquetWriter>();
0 commit comments