From e38344cd37402ea594157a119e985dbfbd99bbfb Mon Sep 17 00:00:00 2001 From: 1fanwang <1fannnw@gmail.com> Date: Tue, 12 May 2026 01:24:58 -0700 Subject: [PATCH] GH-3354: Make LocalInputFile.toString() return the file path ParquetFileReader uses InputFile.toString() to build the "is not a Parquet file" error message. HadoopInputFile overrides toString() to return its Path, so the error message is actionable for Hadoop-backed reads. For LocalInputFile and any third-party InputFile that does not override toString(), the message degrades to "ClassName@hashcode is not a Parquet file (length is too low: 10)", which gives no clue which file was bad. Override toString() on LocalInputFile so the same code path produces a path-bearing message for local reads, matching HadoopInputFile. --- .../java/org/apache/parquet/io/LocalInputFile.java | 5 +++++ .../org/apache/parquet/io/TestLocalInputOutput.java | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/parquet-common/src/main/java/org/apache/parquet/io/LocalInputFile.java b/parquet-common/src/main/java/org/apache/parquet/io/LocalInputFile.java index 7174b42d5d..f4f2a996a3 100644 --- a/parquet-common/src/main/java/org/apache/parquet/io/LocalInputFile.java +++ b/parquet-common/src/main/java/org/apache/parquet/io/LocalInputFile.java @@ -99,4 +99,9 @@ public void close() throws IOException { } }; } + + @Override + public String toString() { + return path.toString(); + } } diff --git a/parquet-common/src/test/java/org/apache/parquet/io/TestLocalInputOutput.java b/parquet-common/src/test/java/org/apache/parquet/io/TestLocalInputOutput.java index 84d728f14e..42d5b7ca6f 100644 --- a/parquet-common/src/test/java/org/apache/parquet/io/TestLocalInputOutput.java +++ b/parquet-common/src/test/java/org/apache/parquet/io/TestLocalInputOutput.java @@ -47,6 +47,17 @@ public void outputFileOverwritesFile() throws IOException { } } + @Test + public void inputFileToStringReturnsPath() throws IOException { + Path path = Paths.get(createTempFile().getPath()); + InputFile read = new LocalInputFile(path); + // toString() is used by ParquetFileReader when constructing error messages + // such as " is not a Parquet file (length is too low: ...)". A + // path-bearing toString() keeps those error messages actionable for + // implementations that don't expose a more specific accessor. + assertEquals(path.toString(), read.toString()); + } + @Test public void outputFileCreateFailsAsFileAlreadyExists() throws IOException { Path path = Paths.get(createTempFile().getPath());