NikitaMatskevich commented on code in PR #13459:
URL: https://github.com/apache/iceberg/pull/13459#discussion_r2183601029


##########
spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/actions/RewriteTablePathSparkAction.java:
##########
@@ -312,22 +316,42 @@ private String rebuildMetadata() {
   }
 
   private String saveFileList(Set<Pair<String, String>> filesToMove) {
-    List<Tuple2<String, String>> fileList =
-        filesToMove.stream()
-            .map(p -> Tuple2.apply(p.first(), p.second()))
-            .collect(Collectors.toList());
-    Dataset<Tuple2<String, String>> fileListDataset =
-        spark().createDataset(fileList, Encoders.tuple(Encoders.STRING(), 
Encoders.STRING()));
     String fileListPath = stagingDir + RESULT_LOCATION;
-    fileListDataset
-        .repartition(1)
-        .write()
-        .mode(SaveMode.Overwrite)
-        .format("csv")
-        .save(fileListPath);
+
+    // We need ResolvingFileIO in case we are writing to another filesystem.
+    try (FileIO io = fetchResolvingFileIO()) {
+      // Write using native Iceberg FileIO instead of relying on Spark writers
+      OutputFile fileList = io.newOutputFile(fileListPath);
+      writeAsCsv(filesToMove, fileList);
+    }
+
     return fileListPath;
   }
 
+  private void writeAsCsv(Set<Pair<String, String>> csvRows, OutputFile 
outputFile) {
+    try (BufferedWriter writer = new BufferedWriter(
+            new OutputStreamWriter(outputFile.create(), 
StandardCharsets.UTF_8))) {
+      for (Pair<String, String> pair : csvRows) {
+        writer.write(String.join(",", pair.first(), pair.second()));
+        writer.newLine();
+      }
+    } catch (IOException e) {
+      throw new RuntimeIOException(e);
+    }
+  }
+
+  private FileIO fetchResolvingFileIO() {
+    FileIO tableIO = table.io();
+    ResolvingFileIO resolvingIO = (ResolvingFileIO) CatalogUtil.loadFileIO(

Review Comment:
   After looking at the code again I realized that stagingDir couldn't have 
been used with another filesystem as you said. I will simplify this part. Thank 
you for the review!



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


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

Reply via email to