From 72ebf5a1d7220ef1a3dfb7d755743652f4a3691d Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 18 Aug 2025 10:39:56 -0700 Subject: [PATCH 01/27] backport changes --- .../parquet/TestParquetVectorizedReads.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index beb40e764f67..c7a961619652 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -366,12 +366,14 @@ public void testReadsForTypePromotedColumns() throws Exception { public void testSupportedReadsForParquetV2() throws Exception { // Float and double column types are written using plain encoding with Parquet V2, // also Parquet V2 will dictionary encode decimals that use fixed length binary - // (i.e. decimals > 8 bytes) + // (i.e. decimals > 8 bytes). Int and long types use DELTA_BINARY_PACKED. Schema schema = - new Schema( - optional(102, "float_data", Types.FloatType.get()), - optional(103, "double_data", Types.DoubleType.get()), - optional(104, "decimal_data", Types.DecimalType.of(25, 5))); + new Schema( + optional(102, "float_data", Types.FloatType.get()), + optional(103, "double_data", Types.DoubleType.get()), + optional(104, "decimal_data", Types.DecimalType.of(25, 5)), + optional(105, "int_data", Types.IntegerType.get()), + optional(106, "long_data", Types.LongType.get())); File dataFile = File.createTempFile("junit", null, temp.toFile()); assertThat(dataFile.delete()).as("Delete should succeed").isTrue(); @@ -385,8 +387,7 @@ public void testSupportedReadsForParquetV2() throws Exception { @Test public void testUnsupportedReadsForParquetV2() throws Exception { - // Longs, ints, string types etc use delta encoding and which are not supported for vectorized - // reads + // Some types use delta encoding and which are not supported for vectorized reads Schema schema = new Schema(SUPPORTED_PRIMITIVES.fields()); File dataFile = File.createTempFile("junit", null, temp.toFile()); assertThat(dataFile.delete()).as("Delete should succeed").isTrue(); From 23f7747999b089a52d975253f7f45e17b71c8448 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 18 Aug 2025 11:34:02 -0700 Subject: [PATCH 02/27] add vectorized & nonvectorized check --- .../parquet/TestParquetVectorizedReads.java | 86 +++++++++++++------ 1 file changed, 58 insertions(+), 28 deletions(-) diff --git a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 757331dcb5dc..8d121cf2b16a 100644 --- a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -29,12 +29,15 @@ import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Stream; import org.apache.iceberg.Files; import org.apache.iceberg.Schema; +import org.apache.iceberg.data.DeleteFilter; import org.apache.iceberg.data.RandomGenericData; import org.apache.iceberg.data.Record; import org.apache.iceberg.data.parquet.GenericParquetWriter; @@ -440,48 +443,75 @@ public void testUuidReads() throws Exception { assertRecordsMatch(schema, numRows, data, dataFile, false, BATCH_SIZE); } - private void assertIdenticalFileContents(File actual, File expected, Schema schema) - throws IOException { - try (CloseableIterable actualReader = - Parquet.read(Files.localInput(actual)) - .project(schema) - .createReaderFunc(t -> SparkParquetReaders.buildReader(schema, t, ID_TO_CONSTANT)) - .build()) { - Iterator actualIterator = actualReader.iterator(); - try (CloseableIterable plainReader = - Parquet.read(Files.localInput(expected)) + private Parquet.ReadBuilder createReadFunc( + Parquet.ReadBuilder readBuilder, + Schema schema, + boolean vectorized) { + if (vectorized) { + return readBuilder .project(schema) - .createReaderFunc(t -> SparkParquetReaders.buildReader(schema, t, ID_TO_CONSTANT)) - .build()) { - Iterator expectedIterator = plainReader.iterator(); + .createBatchedReaderFunc(t -> VectorizedSparkParquetReaders.buildReader(schema, t, ID_TO_CONSTANT, null)); + } else { + return readBuilder + .project(schema) + .createReaderFunc(t -> SparkParquetReaders.buildReader(schema, t, ID_TO_CONSTANT)); + } + } - List expectedList = Lists.newArrayList(); + @SuppressWarnings("unchecked") + private void assertIdenticalFileContents(File actual, File expected, Schema schema, boolean vectorized) + throws IOException { + try (CloseableIterable actualReader = + createReadFunc(Parquet.read(Files.localInput(actual)), schema, vectorized).build()) { + Iterator actualIterator = actualReader.iterator(); + try (CloseableIterable plainReader = + createReadFunc(Parquet.read(Files.localInput(expected)), schema, vectorized).build()) { + Iterator expectedIterator = plainReader.iterator(); + List expectedList = Lists.newArrayList(); expectedIterator.forEachRemaining(expectedList::add); - List actualList = Lists.newArrayList(); + List actualList = Lists.newArrayList(); actualIterator.forEachRemaining(actualList::add); - assertThat(actualList) - .as("Comparison between files failed %s <-> %s", actual, expected) - .isNotEmpty() - .hasSameSizeAs(expectedList) - .hasSameElementsAs(expectedList); + if (vectorized) { + assertBatchListsEqualByRows((List) actualList, (List) expectedList); + } else { + assertThat(actualList) + .as("Comparison between files failed %s <-> %s", actual, expected) + .isNotEmpty() + .hasSameSizeAs(expectedList) + .hasSameElementsAs(expectedList); + } } } } + static void assertBatchListsEqualByRows(List actual, List expected) { + List actualRows = new ArrayList<>(); + actual.forEach(b -> b.rowIterator().forEachRemaining(actualRows::add)); + List expectedRows = new ArrayList<>(); + expected.forEach(b -> b.rowIterator().forEachRemaining(expectedRows::add)); + assertThat(actualRows) + .as("(Vectorized) Comparison between files failed %s <-> %s", actual, expected) + .hasSameSizeAs(expectedRows) + .hasSameElementsAs(expectedRows); + } + static Stream goldenFilesAndEncodings() { return GOLDEN_FILE_ENCODINGS.stream() - .flatMap( - encoding -> - GOLDEN_FILE_TYPES.entrySet().stream() - .map( - typeEntry -> - Arguments.of(encoding, typeEntry.getKey(), typeEntry.getValue()))); + .flatMap(encoding -> + GOLDEN_FILE_TYPES.entrySet().stream() + .flatMap(e -> + Stream.of(true, false) + .map(vectorized -> + Arguments.of(encoding, e.getKey(), e.getValue(), vectorized) + ) + ) + ); } @ParameterizedTest @MethodSource("goldenFilesAndEncodings") - public void testGoldenFiles(String encoding, String typeName, PrimitiveType primitiveType) + public void testGoldenFiles(String encoding, String typeName, PrimitiveType primitiveType, boolean vectorized) throws Exception { Path goldenResourcePath = Paths.get("encodings", encoding, typeName + ".parquet"); URL goldenFileUrl = getClass().getClassLoader().getResource(goldenResourcePath.toString()); @@ -495,6 +525,6 @@ public void testGoldenFiles(String encoding, String typeName, PrimitiveType prim Schema expectedSchema = new Schema(optional(1, "data", primitiveType)); assertIdenticalFileContents( - new File(goldenFileUrl.toURI()), new File(plainFileUrl.toURI()), expectedSchema); + new File(goldenFileUrl.toURI()), new File(plainFileUrl.toURI()), expectedSchema, vectorized); } } From d115676a72f78717a7b534b08de008d760c958d3 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 18 Aug 2025 11:34:45 -0700 Subject: [PATCH 03/27] lint --- gradle.properties | 2 +- .../parquet/TestParquetVectorizedReads.java | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5da56c59de41..36e4a92ddced 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ jmhJsonOutputPath=build/reports/jmh/results.json jmhIncludeRegex=.* systemProp.defaultFlinkVersions=2.0 systemProp.knownFlinkVersions=1.19,1.20,2.0 -systemProp.defaultSparkVersions=4.0 +systemProp.defaultSparkVersions=4.0g systemProp.knownSparkVersions=3.4,3.5,4.0 systemProp.defaultKafkaVersions=3 systemProp.knownKafkaVersions=3 diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index c7a961619652..d34da5da2a6b 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -368,12 +368,12 @@ public void testSupportedReadsForParquetV2() throws Exception { // also Parquet V2 will dictionary encode decimals that use fixed length binary // (i.e. decimals > 8 bytes). Int and long types use DELTA_BINARY_PACKED. Schema schema = - new Schema( - optional(102, "float_data", Types.FloatType.get()), - optional(103, "double_data", Types.DoubleType.get()), - optional(104, "decimal_data", Types.DecimalType.of(25, 5)), - optional(105, "int_data", Types.IntegerType.get()), - optional(106, "long_data", Types.LongType.get())); + new Schema( + optional(102, "float_data", Types.FloatType.get()), + optional(103, "double_data", Types.DoubleType.get()), + optional(104, "decimal_data", Types.DecimalType.of(25, 5)), + optional(105, "int_data", Types.IntegerType.get()), + optional(106, "long_data", Types.LongType.get())); File dataFile = File.createTempFile("junit", null, temp.toFile()); assertThat(dataFile.delete()).as("Delete should succeed").isTrue(); From 5e1b3be33c4a62055555733921a3a3ad93128336 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 18 Aug 2025 11:35:55 -0700 Subject: [PATCH 04/27] typofix --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 36e4a92ddced..5da56c59de41 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ jmhJsonOutputPath=build/reports/jmh/results.json jmhIncludeRegex=.* systemProp.defaultFlinkVersions=2.0 systemProp.knownFlinkVersions=1.19,1.20,2.0 -systemProp.defaultSparkVersions=4.0g +systemProp.defaultSparkVersions=4.0 systemProp.knownSparkVersions=3.4,3.5,4.0 systemProp.defaultKafkaVersions=3 systemProp.knownKafkaVersions=3 From c955805df34e8cfbebe6a91e52df5d5779c64c94 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 18 Aug 2025 11:45:14 -0700 Subject: [PATCH 05/27] stable using json --- .../parquet/TestParquetVectorizedReads.java | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 8d121cf2b16a..e71896e5b1b3 100644 --- a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -24,8 +24,10 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assumptions.assumeThat; +import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; import java.io.File; import java.io.IOException; +import java.io.StringWriter; import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; @@ -51,6 +53,7 @@ import org.apache.iceberg.relocated.com.google.common.collect.Iterables; import org.apache.iceberg.relocated.com.google.common.collect.Lists; import org.apache.iceberg.relocated.com.google.common.collect.Maps; +import org.apache.iceberg.spark.SparkSchemaUtil; import org.apache.iceberg.spark.data.AvroDataTestBase; import org.apache.iceberg.spark.data.GenericsHelpers; import org.apache.iceberg.spark.data.RandomData; @@ -64,11 +67,15 @@ import org.apache.parquet.schema.MessageType; import org.apache.parquet.schema.Type; import org.apache.spark.sql.catalyst.InternalRow; +import org.apache.spark.sql.catalyst.json.JSONOptions; +import org.apache.spark.sql.catalyst.json.JacksonGenerator; +import org.apache.spark.sql.types.StructType; import org.apache.spark.sql.vectorized.ColumnarBatch; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import scala.collection.immutable.HashMap; public class TestParquetVectorizedReads extends AvroDataTestBase { private static final int NUM_ROWS = 200_000; @@ -76,7 +83,7 @@ public class TestParquetVectorizedReads extends AvroDataTestBase { private static final String PLAIN = "PLAIN"; private static final List GOLDEN_FILE_ENCODINGS = - ImmutableList.of("PLAIN_DICTIONARY", "RLE", "RLE_DICTIONARY", "DELTA_BINARY_PACKED"); + ImmutableList.of("PLAIN_DICTIONARY", "RLE_DICTIONARY", "DELTA_BINARY_PACKED"); private static final Map GOLDEN_FILE_TYPES = ImmutableMap.of( "string", Types.StringType.get(), @@ -473,7 +480,7 @@ private void assertIdenticalFileContents(File actual, File expected, Schema actualIterator.forEachRemaining(actualList::add); if (vectorized) { - assertBatchListsEqualByRows((List) actualList, (List) expectedList); + assertBatchListsEqualByRows(schema, (List) actualList, (List) expectedList); } else { assertThat(actualList) .as("Comparison between files failed %s <-> %s", actual, expected) @@ -485,11 +492,20 @@ private void assertIdenticalFileContents(File actual, File expected, Schema } } - static void assertBatchListsEqualByRows(List actual, List expected) { - List actualRows = new ArrayList<>(); - actual.forEach(b -> b.rowIterator().forEachRemaining(actualRows::add)); - List expectedRows = new ArrayList<>(); - expected.forEach(b -> b.rowIterator().forEachRemaining(expectedRows::add)); + private String rowToJson(StructType schema, InternalRow row) { + StringWriter out = new StringWriter(); + JacksonGenerator gen = new JacksonGenerator(schema, out, new JSONOptions(new HashMap<>(), "UTC", "_corrupt")); + gen.write(row); + gen.flush(); + return out.toString(); + } + + private void assertBatchListsEqualByRows(Schema schema, List actual, List expected) { + StructType sparkSchema = SparkSchemaUtil.convert(schema); + List actualRows = new ArrayList<>(); + actual.forEach(b -> b.rowIterator().forEachRemaining(e -> actualRows.add(rowToJson(sparkSchema, e)))); + List expectedRows = new ArrayList<>(); + expected.forEach(b -> b.rowIterator().forEachRemaining(e -> expectedRows.add(rowToJson(sparkSchema, e)))); assertThat(actualRows) .as("(Vectorized) Comparison between files failed %s <-> %s", actual, expected) .hasSameSizeAs(expectedRows) From 01e45497aa60d57a762e43a35a2e7c65f04737f1 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 18 Aug 2025 11:46:51 -0700 Subject: [PATCH 06/27] Add resources for spark 3.5 --- .../encodings/DELTA_BINARY_PACKED/int32.parquet | Bin 0 -> 2179 bytes .../encodings/DELTA_BINARY_PACKED/int64.parquet | Bin 0 -> 5575 bytes .../resources/encodings/PLAIN/binary.parquet | Bin 0 -> 13046 bytes .../resources/encodings/PLAIN/boolean.parquet | Bin 0 -> 359 bytes .../resources/encodings/PLAIN/float.parquet | Bin 0 -> 4252 bytes .../resources/encodings/PLAIN/int32.parquet | Bin 0 -> 4252 bytes .../resources/encodings/PLAIN/int64.parquet | Bin 0 -> 8276 bytes .../resources/encodings/PLAIN/string.parquet | Bin 0 -> 11782 bytes .../encodings/PLAIN_DICTIONARY/binary.parquet | Bin 0 -> 14329 bytes .../encodings/PLAIN_DICTIONARY/float.parquet | Bin 0 -> 5534 bytes .../encodings/PLAIN_DICTIONARY/int32.parquet | Bin 0 -> 5330 bytes .../encodings/PLAIN_DICTIONARY/int64.parquet | Bin 0 -> 9564 bytes .../encodings/PLAIN_DICTIONARY/string.parquet | Bin 0 -> 3093 bytes .../resources/encodings/RLE/boolean.parquet | Bin 0 -> 364 bytes .../encodings/RLE_DICTIONARY/binary.parquet | Bin 0 -> 14329 bytes .../encodings/RLE_DICTIONARY/float.parquet | Bin 0 -> 5534 bytes .../encodings/RLE_DICTIONARY/int32.parquet | Bin 0 -> 5330 bytes .../encodings/RLE_DICTIONARY/int64.parquet | Bin 0 -> 9564 bytes .../encodings/RLE_DICTIONARY/string.parquet | Bin 0 -> 3093 bytes 19 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 spark/v3.5/spark/src/test/resources/encodings/DELTA_BINARY_PACKED/int32.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/DELTA_BINARY_PACKED/int64.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/PLAIN/binary.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/PLAIN/boolean.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/PLAIN/float.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/PLAIN/int32.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/PLAIN/int64.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/PLAIN/string.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/binary.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/float.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/int32.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/int64.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/string.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/RLE/boolean.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/binary.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/float.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/int32.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/int64.parquet create mode 100644 spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/string.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/DELTA_BINARY_PACKED/int32.parquet b/spark/v3.5/spark/src/test/resources/encodings/DELTA_BINARY_PACKED/int32.parquet new file mode 100644 index 0000000000000000000000000000000000000000..bc89aa6511a433e0429bcfffd2ef1407a1fd3bf0 GIT binary patch literal 2179 zcmb7Gi9gg^8~+W1;lstp^0!o*<0 zFkt`?1OQ+N3Q7QhS48^5Sw$d8C{)t+CD3r{8OyhNEziTYPSgM~sx|SoevCTnTH7!u z{rZQ3OOIZt_UZQR^*bl5Pk*wm0urReFCd%J6|%~#JJ!aQzM0>6*J4m;6y?&8N?VLk zNTktv2xZ#3g>MsrzwBp#P=C$%59VVB-GYWv2I(`IDOu>4=7;@~+xK{`9LQ$U50V4s z;0>J@65-+Onz2I6DQP{Qld9EIMoh%62W&s4ypis3So44#vG>TIwNeTLj~zusWdqti zuuG7M(=DT)v*&=#qK)sns@d*tCB0kCzCT+-5+@fC$Bvr1bYTyDr8BG+t&>G#3fUajlOK}(LTnQ1I z3i-H_ccyn1b*vPV#@0(~y&DwaR=R4n!_40sGy8{3xNT6Y3OBvt3nEkldasnQ-($$7D)DK5F60QEQIvHxgJmHxwEmQPw8loNXx+|me`4>+O|Ae zhlt9c7V+^F#VU6RPBN0z;^31?Cvwbg0g;2MFgXLe*1%>GrRjQavtF{ybynjc7p{M| zL5)P!`tmT_%EFSg7Bq@!OCw3yyLxjo^e-+%c@>w-Ur718JwCTf)QOv9DjAr+PLTLy z9D9)*^vt}d$ir)m7x{o=HoLt#B3t@I*hxnm$T5vHCflxA>z1^7Ir^of2p58L^JZjc z|GeksnX*LpN2YYR4 zKMjkoTV;?rL5f!^+e%n*_BFK6Xk~eoW$b8Fh;f41HPB)mW7-5WhjFvJ^a`G!A`&;K zeM=Nu6}zU!F-2*SLD`PO{rl{*D?DQs7O%4yChXG5($|$?H;-3RUSY!(gxdNHM9AMy z$`ok4mi2Dr9emPzdpdvb%Yr(u#*-&#Eb$=6xAR}iFh4=+D`qv^^tQ`I=xE9|UU_>u z|Dd8>6m#>VA4`sax9^nT=})4$p}LQK$Fq5c^}5=B-)H% z7VJOO)mXvJUq4OeI?CS?M|S)NAO=TjPxUwGFIg_-vg|aB+RkooU*I||F$YS8yYo7E z=~}!tu0HB+T+XDHA9ednGOO2wJd<~aktjMw4gG#e?g@@!lwMz!*u}KD*M1DfH8j7UPLljSD#Jg`AP1f%V{R$eStf-%wi5BWz3%r&F>WFLY`tP`rOPj50 zcG}(SI#6%5k0}slYqk=4-w#bwK2~sb?;=B&b^gll(1I!LcV1awFd;1>A}Rf$>Kbs_{mT5LEisrj6} zmUB$TcYpRr`AbC%6tRciWqwdqz}C1q7frPXHyd_G^p>`MwaD;n_v zPg56=2mAU&`T+1DC_)jThy@h+zUsnae4xE?*q#B-ckfifLd<`I|7L;%xPPgB_xLpY zG(n7yX|5rR_?H-fCo99?@O~wjDX@ny1jR!58o;T9`Ow3oXpuV9urM7TIz9BF$^{xd ZA|NzG#ZX_DUl59l{M9z_8VL>o^Ct{W8Pa=YD?w$&9OFTZSXSCY+YpW9U zleF+)WuOii&AERA(#-N(pg8^UGUS&%6v(ho=%38S4f~sUIF~zKiqljX)^K%tHWaEp$V>Ds)7Hch7*nZLwyxQki!NOOsEl@_!7i$ESiV9lP z>ER|dDAWkigo}2i2B2*`(-a3VPj3OAq8uHR!SOi*%}MeiMt?!7#zuW4{g^!OtY)Ec>vU?uJ^;xr_tGt{6Yd(aHxHl6T;S--pbgKvFo zGTe)|(I%+Rv%Hy-q46O!so$0BTqSX`){^RSP1M1HuIZ0p<@>MApsikPg5-~vo}?GD z<%vYEO_YgPDM=aB#M|DM`+>AN(*d%_Rw(J?G*nEk^E}x5xO#;dw_-q^`q1%?v@ue z)RVI=KJbqJa29M%NEwD=n;I1|kh~d76P&+kL64GsM0!$Jk%JaqV(2#onyY5*0!z~n z2UPL&fj8QA+_Hxrwae-NQ?*?DiKRRd>0(0prp`9ToY=ijU~YWgZZNebCL` d69* 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 literal 0 HcmV?d00001 diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN/binary.parquet b/spark/v3.5/spark/src/test/resources/encodings/PLAIN/binary.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5e9402f654e25af1bff0355a7fd4de5a193d2f3f GIT binary patch literal 13046 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 eCBLj5dA|MU`1~CBDOJ(!` literal 0 HcmV?d00001 diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN/float.parquet b/spark/v3.5/spark/src/test/resources/encodings/PLAIN/float.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5ea57ce31d4b95392f86aa863e7d8b2a1df80d6f GIT binary patch literal 4252 zcmX9?30Te98@?^lBoc01U9BpbHYQur{eAC5Sy~ktlvI@VRHkUp(!Qrni?mGIwU;(6 zXs9d^4H`>m8cQZ2{O|ndIp;jzS)TKL=bYz!=l#B8O6IHBEcQ)3epX`-Nbu_-Y!Mbq zh{a+JNC+%hpMX}Eavaulg^x=Uj3X5(f9^rdZm-8lizw_8&c<|519YqwGTB}+U~LJ- zHwkaL!^^-#*db{2u#sKig;UWZ%$LHIaCZI3yx*FH*gj=C`?v|AQpMmdYlMPg9X?oU zV@Hra8EdSe*v1xm{ILt^N5Uzkw+P|$QfSD>fKCS$LHfrA^gR?t)#ox?Rry515hloe zT}zpvF0fy56i?D+G1jmc&AJs#%5XA%S|oy2-wVV^%*FlKb9lI7LQg8d6Q+k|;py$Q z< zMBmn#GdDkJqbIr!Vm7wao7_Y5xG@wq_b^7R3?T0mPSXi0$hvLCaHs1~qyC8${+SP3 zP8N8&j(8yXh#rldz^jFo^mk?vPeiGNmeq#inxrwhTw|$T`U-BWZHHglI?#wKE&R(G zVZ%z;CszucI8joZy$e$|z4)GxMBPse!7F=1t}1Sjn*2!O1w+h%2^oC;ngY#wRh0Zy zME5@Az&7g=bUNlBoqK`aZrh0a(P%$FlLrGJar zqdQJQ(wVr^AB$eoHISFsiG&U_Y`tm;X=5!ox-(ETmV?O6El_)C1HA?5a6I@ct?OP+ zqmc>J-Z~4edrPr5>m9@0a2aa~Q}M){4d;8q6qa_MJWgCf&+oy=&ohT@pd##*b0OfT zz-+sA1xxSyk=8#&=v@^D_MtMoyc&jcs}v!5M4fS{+=mxQRbCvIsR%wl)s8-5b8IM)cvLrV@ z4U0jGDiY`qwknKY5$bP9FeP7h zK=$1b+3ZS&Rgo25c11zWJ^*sFPJ@)fWj?ZU1LJE?4o zIgFOoV0?E3#py*N>i#eZ<)1<9p>f{!@C#TvQiosu*opgxbm^L4KDK5aLZGezLiHY! z)YK4j=i+`G<|v@aFcgk6ThRNy05)RrSfp4$MW<9rp)H!1Hv0hmBD|M8-`}DStQtIC zeV5dF%kjWH5z-&sa3SR?O=x>SZ&Lt91y15Z?PmP2BbxS@IpEo79Tw#jVQHueF1E|V zjyNdM$bedc2?7UJ;MBHM#w~g-hD1(MU1J-}Gn1eiltjDyg=tpgeCmNG{8win$e@c< z4?SQW*Gt3eND=%$yr7IH8hENd4@OJtq1+#b6UOm4RXsr-E4?ukcMzc?ml5x*hv&sI zm}(9O4Ys0Ue=|<9tf(q15h1~Z>ysDh*2F#XOf+D|-t0zM{~&p0h0vGTZZJ14hDiJc zhHdy8#-g@>Bi@GE7B|%S9iyb`Ss+V4)bjT-R<#L*v8wdE{Rceqc+1qC6Ni3&0wiRV zV7ht>v}U5AT^@k|Q+JsEtq!}#>!2vxO$9UW8L?aWuo<3ami(E6q8N8Q-?x!i8`%Mi z`e8a8B*M#H?1I&k%c;q3J`R+9A>lI%$n8WPynXB8hm6Uis5*cT@VIW<=4E495=gUbvw>ZIASi~?# zm&IU>u`}w$8!`5%7k7N(Db3s(Y3g=pFx&(dryga7pNT_z81W&7#*atANjnjXMkmN{ zQ3gqkHX!WideU6miJ+Pl@OsdK5Xl@wRBVE=Pzq8VOEHvF!TkNQ81?hkqSxR%8GSN^ z-_-(Ke;EvuVHYMrG!$Z?ZeWc{VnCpQtTrFOPcIp2abY0AOflo%D=|Y+P?5IapXqE= zJ841ULp)6T~hwsK2%IV9+tG?YZ-M1SeO4(?$2uB#}JFQDhg27&Ytdlgw z{MA*EY*K~2l`r%yE3nkMiE>#g&{O3ylRfJ(e^xpCC3`R^E6S`%?$m91%eR*U$)uXJ z6JseH=npg_BfJSU9XZ&w{v;1s zuXu=O9Y>^*BR02`BXG|!EgbAZo~bO-i_$T-VF8&*t6*2O2>yv&fsX=aSQnlIGw(#i z&1xfm%ZqxeJGCh1FCG4Q&BdyW35vS@oc!ZU@N&)sS#sm>=+7pqzu=6v>Qjusz#p{j z+B4pM$vW6Yb;I90o|%^Z5fe(9B;L%yL?IXNCQc)VV?YiW<#fWZ4MN{8V{Up5{?I>% zLd||^n2)TWHx=NvxHueDa?!A)k-@9un0KoKD<#V4UPmQH zj7;!4x)Fc8bc4Z{9_R>}qkUNv^=S@}W{?c*ImQ?$IE&+c`XKEnJ~#E^%0^#m=JRc_ zYCg1n*#NhgOLSe$55sdWkw{VsG_LOgThWFQS9itdFV(ms>WDy*QV7~EAn{LY@jajd zSC4V=%>NFttsjud1{12isE4t(D(n@AW%kLp!Nj8kZ(K?tP;-#kFqVgrY$4c-hvA@E z6Z&@V!!xlY^s3LH$J|lMvQ4odX4zaJXii##HDYOl~`fA6}HgKIblJT}{Np#tKM;m}1?D9Nf(- zLrY~C{B^qM+OiU~v>qp4pEA5N3ntCd7=&ib0{d_g8YWvQGB66c!cAB+`wR*!S5m*{ zF8r!@O|Q=8L(tC}n_UahvGXjdXSTs+@+KYiSL9`d zWYCek=X5?+gv`2q@q3~m-w*DB#9JHGG@d}go(aUlY!E3%ZJQ{zj&N~YJb-UEadhu+ z6KpT1Vn%2=jdz{{$Ez82tSD+ria_&^8IV~t%oO=t#_sO7B){||Ih~Jz1D_wyoxI09 zt&0I3IpU-1Cb<4022ZO-rhWgfD4q3&d18~uoIhTI3gdF5&+b8fbtj&zIgRL^4k#R4 z4fVfM&>a?norNBYIqVv1g@^uLLV! zgpz*0Ie1gqP|_^GnU+XMUHY4{&sEa)uSM9>FGQ!~GmyYJgKuID^yx(?9x0epOy&bR zm{o>#YOSa*Xop#qC)HURGE#5UFq;yg(Aa|Fv05y8rh=hgFG9j82wr3DDEUDagTiUp zZ1a#D#PcnQUB%_TMrn5Q{q*ligK z?o2E=P79I8vBmPorI^UlMKzz>#J2B2NPY(-`T{A}Ihll~&QoY(89t9lQm0uaEFSpK zPnsFf@n3_n55?HF+yZX=`*1Js8Smo>e~9nP!Pr+bO1B)Rr>drmfOQ?5_;FcMa0k8@ z`{MKdWU4jJ!Ih!)c$Udv(qLwjd(}p&w{Qn%hasu|<%M_L2xyA-&`w!3`0TgAG3Q*$ zajPN2e0@m#7EB+H-C%w<3dQ4Vj_9@)#Di7$NL1PdB4IiBb%#3Sw@p*uqb@{At;I$Q zchYE0<~<+UfWSLrjP2qx*!`W0!F4jY{E3J2Z#%J6&;x}B;t^!=ijo|{u;6=PM={JEv4Qr=Oz0^1^Y-yt_&%o~9Gl0OQnm>W zS6f0RRh;TWD)AE|j$k2S`WR%v$c$Y;=+Q6Ch>Qf@b;%%jhy@!f3o;D60u5n1ysOBi z%x4ieogWD?nOtxr1vyKE|7B~w_}7VH3v#4bE0y`NJB!1W5@k>6N%13jwlGI+4Qq+W zQ9DNmS6j9qi!G`oxJ20A*4vgPH6X#^a=6MYE?bnNB*NkY{oBv}cR-3ieM(PRRQEsd z|1?RlR{USpe=WWm{+|JhkEy#-g!6yJEU7vkTT1Gi9(z6OUxWb(Wl_Flt&sDu_44#_ p@K(3;@KCq)@^U{W=j-5g)XCjVZnc&MKXJHR{%Xtl#gzXq@jr3-6-fX9 literal 0 HcmV?d00001 diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN/int32.parquet b/spark/v3.5/spark/src/test/resources/encodings/PLAIN/int32.parquet new file mode 100644 index 0000000000000000000000000000000000000000..225b9903923dc946a35c8136067cfc54c5a9abe2 GIT binary patch literal 4252 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 T4^vchX7p7v|81H1{|WvNd7%TE literal 0 HcmV?d00001 diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN/string.parquet b/spark/v3.5/spark/src/test/resources/encodings/PLAIN/string.parquet new file mode 100644 index 0000000000000000000000000000000000000000..57785ff2639f34fa28a932816774a7df9d330a00 GIT binary patch literal 11782 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
$oC@B(zV~OF4ko8S?ybDds3Hm#(ZJ_oW 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 CS2}nA literal 0 HcmV?d00001 diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/float.parquet b/spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/float.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3694c4a207a5dcd14b3c8b0ccded9a560f556f44 GIT binary patch literal 5534 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 literal 0 HcmV?d00001 diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/string.parquet b/spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/string.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c66dd5342e9cb57bbc5a6d3e67275a4310e7be0b GIT binary patch literal 3093 zcmYjUSyvj{5^hle1p^L^w4xGG8~_InI7CGp;*fw6iIONrkwH*UP@IUygE1P1XpAK0 zB(L}RJlvf2Sd_fpT$OebAHpX%7hMgJwCsWOTx zq$p|?B4a1poD{LslpxS2IRTa+nS{eFQ2>e%LHHmq;B)}N@+J|eRv@tFgRw7s30A=%Kx7B73lIT-C&a#>=VF6X zS`fq*K!9-m0pXmmBOn4CVMr2y>0|GvL2H6)vh{*+J7XmHW zzL0__5v&t1CS=oy&+Q&=*F?b=UmNxXN}Pu%76=V8z?|a(s=`*GjS+z%*9D{v_(o!1 zAV3NV1fPD8<|@gK@W)%OVnIkQDF8t}Vr*dtVu|=x0YE$oFysr0U|c;h0>zz5cEplc zvk1QU6tFJdM5w}z*u4jU2wxz@yM#lrU4aoe0mF9#FhaUX zzD06~CEg08H4s$HAxWZWNleAl0P$w-o;QRPPG=whJjoW+LiR%;ScqSU%J~PHoIZFL zG7heM^Fl2IfkSREMq_bPbBngsWHwe=+G^V^c^#5Y ziS;*Ip}o1Q+uqY#_oT0Xz%i(D4%vrCMxR=kM#tFD_{5~l##B9{^=-1}6)ugn*X}Nx zn)c{lbkB5nUyd1O=Vp8kYy0G@7q1(p<`<@&UH7Ag=JH_Z z<%>dB|8lJ?95LwLjI2gW0iTZ-+p-nCOBGtAfZ?GEj!_YX3Ow?&b|qjCSc4bM@B-ewzFI5w_C4yWx7xo`CM zY>R6sqBv>T?tB0Gbl|8(o@rl+GlR9Mo)2e(`pAb^$UEpP_qNEZ?dNqL%j~1?<_>pC z-(4t!w&B#JEPYjc9WCFyZaix%R-F6y5}B^~75j3-_@~Um(#`w+iSu3e-dcG@ ztRYADDNf#7c8;8frr9q+L;rsDaY5L9r_Rf_HKf1Y9VQCr<{~yj{#bqfl|OBM>+N+u zO5HrMZNz1-<7w}DUd#HfH38}{3woAs;EKEAs_`5!r4mM4NbV;_TP$3-nG7vqG*pX`y$vWvr}q$RMmwYjI?4R3A7HaGOvjyCp((Sh23*k2F(55fNc8aP!m literal 0 HcmV?d00001 diff --git a/spark/v3.5/spark/src/test/resources/encodings/RLE/boolean.parquet b/spark/v3.5/spark/src/test/resources/encodings/RLE/boolean.parquet new file mode 100644 index 0000000000000000000000000000000000000000..fe4f62455d087ea1b3e8c56bf7870b1ea046ea02 GIT binary patch literal 364 zcmWG=3^EjD5S_vVL^`4u_(j=3kb!}jfq~%yKVv&q5Mfb}xEN6P9ws#o8=%2J^Til6 zz%WlLXtvAohVtR7~s$lc){@NY@2^H4Y%nprKHZSX5Y=TB4g=P@tPw hRFq$?P?lO$oSC1eU}T^Ngpx8cKnE@a;s9Vc0|3r#XVw4! literal 0 HcmV?d00001 diff --git a/spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/binary.parquet b/spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/binary.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5cd26dbb814f38415655fc860f8a0433ed28edab GIT binary patch literal 14329 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
$oC@B(zV~OF4ko8S?ybDds3Hm#(ZJ_oW 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 CS2}nA literal 0 HcmV?d00001 diff --git a/spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/float.parquet b/spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/float.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3694c4a207a5dcd14b3c8b0ccded9a560f556f44 GIT binary patch literal 5534 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 literal 0 HcmV?d00001 diff --git a/spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/string.parquet b/spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/string.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c66dd5342e9cb57bbc5a6d3e67275a4310e7be0b GIT binary patch literal 3093 zcmYjUSyvj{5^hle1p^L^w4xGG8~_InI7CGp;*fw6iIONrkwH*UP@IUygE1P1XpAK0 zB(L}RJlvf2Sd_fpT$OebAHpX%7hMgJwCsWOTx zq$p|?B4a1poD{LslpxS2IRTa+nS{eFQ2>e%LHHmq;B)}N@+J|eRv@tFgRw7s30A=%Kx7B73lIT-C&a#>=VF6X zS`fq*K!9-m0pXmmBOn4CVMr2y>0|GvL2H6)vh{*+J7XmHW zzL0__5v&t1CS=oy&+Q&=*F?b=UmNxXN}Pu%76=V8z?|a(s=`*GjS+z%*9D{v_(o!1 zAV3NV1fPD8<|@gK@W)%OVnIkQDF8t}Vr*dtVu|=x0YE$oFysr0U|c;h0>zz5cEplc zvk1QU6tFJdM5w}z*u4jU2wxz@yM#lrU4aoe0mF9#FhaUX zzD06~CEg08H4s$HAxWZWNleAl0P$w-o;QRPPG=whJjoW+LiR%;ScqSU%J~PHoIZFL zG7heM^Fl2IfkSREMq_bPbBngsWHwe=+G^V^c^#5Y ziS;*Ip}o1Q+uqY#_oT0Xz%i(D4%vrCMxR=kM#tFD_{5~l##B9{^=-1}6)ugn*X}Nx zn)c{lbkB5nUyd1O=Vp8kYy0G@7q1(p<`<@&UH7Ag=JH_Z z<%>dB|8lJ?95LwLjI2gW0iTZ-+p-nCOBGtAfZ?GEj!_YX3Ow?&b|qjCSc4bM@B-ewzFI5w_C4yWx7xo`CM zY>R6sqBv>T?tB0Gbl|8(o@rl+GlR9Mo)2e(`pAb^$UEpP_qNEZ?dNqL%j~1?<_>pC z-(4t!w&B#JEPYjc9WCFyZaix%R-F6y5}B^~75j3-_@~Um(#`w+iSu3e-dcG@ ztRYADDNf#7c8;8frr9q+L;rsDaY5L9r_Rf_HKf1Y9VQCr<{~yj{#bqfl|OBM>+N+u zO5HrMZNz1-<7w}DUd#HfH38}{3woAs;EKEAs_`5!r4mM4NbV;_TP$3-nG7vqG*pX`y$vWvr}q$RMmwYjI?4R3A7HaGOvjyCp((Sh23*k2F(55fNc8aP!m literal 0 HcmV?d00001 From bfd84a4d087a5555a1a2f58c32b51b221ae9fa01 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 18 Aug 2025 11:54:19 -0700 Subject: [PATCH 07/27] semistable --- gradle.properties | 2 +- .../parquet/TestParquetVectorizedReads.java | 133 ++++++++++++++++++ .../parquet/TestParquetVectorizedReads.java | 80 ++++++----- 3 files changed, 177 insertions(+), 38 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5da56c59de41..dacc624a6208 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ jmhJsonOutputPath=build/reports/jmh/results.json jmhIncludeRegex=.* systemProp.defaultFlinkVersions=2.0 systemProp.knownFlinkVersions=1.19,1.20,2.0 -systemProp.defaultSparkVersions=4.0 +systemProp.defaultSparkVersions=4.0,3.5 systemProp.knownSparkVersions=3.4,3.5,4.0 systemProp.defaultKafkaVersions=3 systemProp.knownKafkaVersions=3 diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index d34da5da2a6b..1daa4c9e6106 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -26,9 +26,15 @@ import java.io.File; import java.io.IOException; +import java.io.StringWriter; +import java.net.URL; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.stream.Stream; import org.apache.iceberg.Files; import org.apache.iceberg.Schema; import org.apache.iceberg.data.RandomGenericData; @@ -39,27 +45,51 @@ import org.apache.iceberg.parquet.Parquet; import org.apache.iceberg.relocated.com.google.common.base.Function; import org.apache.iceberg.relocated.com.google.common.base.Strings; +import org.apache.iceberg.relocated.com.google.common.collect.ImmutableList; import org.apache.iceberg.relocated.com.google.common.collect.ImmutableMap; import org.apache.iceberg.relocated.com.google.common.collect.Iterables; import org.apache.iceberg.relocated.com.google.common.collect.Lists; import org.apache.iceberg.relocated.com.google.common.collect.Maps; +import org.apache.iceberg.spark.SparkSchemaUtil; import org.apache.iceberg.spark.data.AvroDataTestBase; import org.apache.iceberg.spark.data.GenericsHelpers; import org.apache.iceberg.spark.data.RandomData; +import org.apache.iceberg.spark.data.SparkParquetReaders; import org.apache.iceberg.spark.data.vectorized.VectorizedSparkParquetReaders; +import org.apache.iceberg.types.Type.PrimitiveType; import org.apache.iceberg.types.TypeUtil; import org.apache.iceberg.types.Types; import org.apache.parquet.column.ParquetProperties; import org.apache.parquet.schema.GroupType; import org.apache.parquet.schema.MessageType; import org.apache.parquet.schema.Type; +import org.apache.spark.sql.catalyst.InternalRow; +import org.apache.spark.sql.catalyst.json.JSONOptions; +import org.apache.spark.sql.catalyst.json.JacksonGenerator; +import org.apache.spark.sql.types.StructType; import org.apache.spark.sql.vectorized.ColumnarBatch; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import scala.collection.immutable.HashMap; public class TestParquetVectorizedReads extends AvroDataTestBase { private static final int NUM_ROWS = 200_000; static final int BATCH_SIZE = 10_000; + private static final String PLAIN = "PLAIN"; + private static final List GOLDEN_FILE_ENCODINGS = + ImmutableList.of("PLAIN_DICTIONARY", "RLE_DICTIONARY", "DELTA_BINARY_PACKED"); + private static final Map GOLDEN_FILE_TYPES = + ImmutableMap.of( + "string", Types.StringType.get(), + "float", Types.FloatType.get(), + "int32", Types.IntegerType.get(), + "int64", Types.LongType.get(), + "binary", Types.BinaryType.get(), + "boolean", Types.BooleanType.get()); + static final Function IDENTITY = record -> record; @Override @@ -416,4 +446,107 @@ public void testUuidReads() throws Exception { } assertRecordsMatch(schema, numRows, data, dataFile, false, BATCH_SIZE); } + + private Parquet.ReadBuilder createReadFunc( + Parquet.ReadBuilder readBuilder, Schema schema, boolean vectorized) { + if (vectorized) { + return readBuilder + .project(schema) + .createBatchedReaderFunc( + t -> VectorizedSparkParquetReaders.buildReader(schema, t, ID_TO_CONSTANT, null)); + } else { + return readBuilder + .project(schema) + .createReaderFunc(t -> SparkParquetReaders.buildReader(schema, t, ID_TO_CONSTANT)); + } + } + + @SuppressWarnings("unchecked") + private void assertIdenticalFileContents( + File actual, File expected, Schema schema, boolean vectorized) throws IOException { + try (CloseableIterable actualReader = + createReadFunc(Parquet.read(Files.localInput(actual)), schema, vectorized).build()) { + Iterator actualIterator = actualReader.iterator(); + try (CloseableIterable plainReader = + createReadFunc(Parquet.read(Files.localInput(expected)), schema, vectorized).build()) { + Iterator expectedIterator = plainReader.iterator(); + List expectedList = Lists.newArrayList(); + expectedIterator.forEachRemaining(expectedList::add); + List actualList = Lists.newArrayList(); + actualIterator.forEachRemaining(actualList::add); + + if (vectorized) { + assertBatchListsEqualByRows( + schema, (List) actualList, (List) expectedList); + } else { + assertThat(actualList) + .as("Comparison between files failed %s <-> %s", actual, expected) + .isNotEmpty() + .hasSameSizeAs(expectedList) + .hasSameElementsAs(expectedList); + } + } + } + } + + private String rowToJson(StructType schema, InternalRow row) { + StringWriter out = new StringWriter(); + JacksonGenerator gen = + new JacksonGenerator(schema, out, new JSONOptions(new HashMap<>(), "UTC", "_corrupt")); + gen.write(row); + gen.flush(); + return out.toString(); + } + + private void assertBatchListsEqualByRows( + Schema schema, List actual, List expected) { + StructType sparkSchema = SparkSchemaUtil.convert(schema); + List actualRows = new ArrayList<>(); + actual.forEach( + b -> b.rowIterator().forEachRemaining(e -> actualRows.add(rowToJson(sparkSchema, e)))); + List expectedRows = new ArrayList<>(); + expected.forEach( + b -> b.rowIterator().forEachRemaining(e -> expectedRows.add(rowToJson(sparkSchema, e)))); + assertThat(actualRows) + .as("(Vectorized) Comparison between files failed %s <-> %s", actual, expected) + .hasSameSizeAs(expectedRows) + .hasSameElementsAs(expectedRows); + } + + static Stream goldenFilesAndEncodings() { + return GOLDEN_FILE_ENCODINGS.stream() + .flatMap( + encoding -> + GOLDEN_FILE_TYPES.entrySet().stream() + .flatMap( + e -> + Stream.of(true, false) + .map( + vectorized -> + Arguments.of( + encoding, e.getKey(), e.getValue(), vectorized)))); + } + + @ParameterizedTest + @MethodSource("goldenFilesAndEncodings") + public void testGoldenFiles( + String encoding, String typeName, PrimitiveType primitiveType, boolean vectorized) + throws Exception { + Path goldenResourcePath = Paths.get("encodings", encoding, typeName + ".parquet"); + URL goldenFileUrl = getClass().getClassLoader().getResource(goldenResourcePath.toString()); + assumeThat(goldenFileUrl).isNotNull().as("type/encoding pair exists"); + + Path plainResourcePath = Paths.get("encodings", PLAIN, typeName + ".parquet"); + URL plainFileUrl = getClass().getClassLoader().getResource(plainResourcePath.toString()); + if (plainFileUrl == null) { + throw new IllegalStateException("PLAIN encoded file should exist: " + plainResourcePath); + } + + Schema expectedSchema = new Schema(optional(1, "data", primitiveType)); + assertIdenticalFileContents( + new File(goldenFileUrl.toURI()), + new File(plainFileUrl.toURI()), + expectedSchema, + vectorized); + } } diff --git a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index e71896e5b1b3..1daa4c9e6106 100644 --- a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -24,7 +24,6 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assumptions.assumeThat; -import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; import java.io.File; import java.io.IOException; import java.io.StringWriter; @@ -35,11 +34,9 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.stream.Stream; import org.apache.iceberg.Files; import org.apache.iceberg.Schema; -import org.apache.iceberg.data.DeleteFilter; import org.apache.iceberg.data.RandomGenericData; import org.apache.iceberg.data.Record; import org.apache.iceberg.data.parquet.GenericParquetWriter; @@ -451,28 +448,27 @@ public void testUuidReads() throws Exception { } private Parquet.ReadBuilder createReadFunc( - Parquet.ReadBuilder readBuilder, - Schema schema, - boolean vectorized) { + Parquet.ReadBuilder readBuilder, Schema schema, boolean vectorized) { if (vectorized) { return readBuilder - .project(schema) - .createBatchedReaderFunc(t -> VectorizedSparkParquetReaders.buildReader(schema, t, ID_TO_CONSTANT, null)); + .project(schema) + .createBatchedReaderFunc( + t -> VectorizedSparkParquetReaders.buildReader(schema, t, ID_TO_CONSTANT, null)); } else { return readBuilder - .project(schema) - .createReaderFunc(t -> SparkParquetReaders.buildReader(schema, t, ID_TO_CONSTANT)); + .project(schema) + .createReaderFunc(t -> SparkParquetReaders.buildReader(schema, t, ID_TO_CONSTANT)); } } @SuppressWarnings("unchecked") - private void assertIdenticalFileContents(File actual, File expected, Schema schema, boolean vectorized) - throws IOException { + private void assertIdenticalFileContents( + File actual, File expected, Schema schema, boolean vectorized) throws IOException { try (CloseableIterable actualReader = - createReadFunc(Parquet.read(Files.localInput(actual)), schema, vectorized).build()) { + createReadFunc(Parquet.read(Files.localInput(actual)), schema, vectorized).build()) { Iterator actualIterator = actualReader.iterator(); try (CloseableIterable plainReader = - createReadFunc(Parquet.read(Files.localInput(expected)), schema, vectorized).build()) { + createReadFunc(Parquet.read(Files.localInput(expected)), schema, vectorized).build()) { Iterator expectedIterator = plainReader.iterator(); List expectedList = Lists.newArrayList(); expectedIterator.forEachRemaining(expectedList::add); @@ -480,13 +476,14 @@ private void assertIdenticalFileContents(File actual, File expected, Schema actualIterator.forEachRemaining(actualList::add); if (vectorized) { - assertBatchListsEqualByRows(schema, (List) actualList, (List) expectedList); + assertBatchListsEqualByRows( + schema, (List) actualList, (List) expectedList); } else { assertThat(actualList) - .as("Comparison between files failed %s <-> %s", actual, expected) - .isNotEmpty() - .hasSameSizeAs(expectedList) - .hasSameElementsAs(expectedList); + .as("Comparison between files failed %s <-> %s", actual, expected) + .isNotEmpty() + .hasSameSizeAs(expectedList) + .hasSameElementsAs(expectedList); } } } @@ -494,40 +491,46 @@ private void assertIdenticalFileContents(File actual, File expected, Schema private String rowToJson(StructType schema, InternalRow row) { StringWriter out = new StringWriter(); - JacksonGenerator gen = new JacksonGenerator(schema, out, new JSONOptions(new HashMap<>(), "UTC", "_corrupt")); + JacksonGenerator gen = + new JacksonGenerator(schema, out, new JSONOptions(new HashMap<>(), "UTC", "_corrupt")); gen.write(row); gen.flush(); return out.toString(); } - private void assertBatchListsEqualByRows(Schema schema, List actual, List expected) { + private void assertBatchListsEqualByRows( + Schema schema, List actual, List expected) { StructType sparkSchema = SparkSchemaUtil.convert(schema); List actualRows = new ArrayList<>(); - actual.forEach(b -> b.rowIterator().forEachRemaining(e -> actualRows.add(rowToJson(sparkSchema, e)))); + actual.forEach( + b -> b.rowIterator().forEachRemaining(e -> actualRows.add(rowToJson(sparkSchema, e)))); List expectedRows = new ArrayList<>(); - expected.forEach(b -> b.rowIterator().forEachRemaining(e -> expectedRows.add(rowToJson(sparkSchema, e)))); + expected.forEach( + b -> b.rowIterator().forEachRemaining(e -> expectedRows.add(rowToJson(sparkSchema, e)))); assertThat(actualRows) - .as("(Vectorized) Comparison between files failed %s <-> %s", actual, expected) - .hasSameSizeAs(expectedRows) - .hasSameElementsAs(expectedRows); + .as("(Vectorized) Comparison between files failed %s <-> %s", actual, expected) + .hasSameSizeAs(expectedRows) + .hasSameElementsAs(expectedRows); } static Stream goldenFilesAndEncodings() { return GOLDEN_FILE_ENCODINGS.stream() - .flatMap(encoding -> - GOLDEN_FILE_TYPES.entrySet().stream() - .flatMap(e -> - Stream.of(true, false) - .map(vectorized -> - Arguments.of(encoding, e.getKey(), e.getValue(), vectorized) - ) - ) - ); + .flatMap( + encoding -> + GOLDEN_FILE_TYPES.entrySet().stream() + .flatMap( + e -> + Stream.of(true, false) + .map( + vectorized -> + Arguments.of( + encoding, e.getKey(), e.getValue(), vectorized)))); } @ParameterizedTest @MethodSource("goldenFilesAndEncodings") - public void testGoldenFiles(String encoding, String typeName, PrimitiveType primitiveType, boolean vectorized) + public void testGoldenFiles( + String encoding, String typeName, PrimitiveType primitiveType, boolean vectorized) throws Exception { Path goldenResourcePath = Paths.get("encodings", encoding, typeName + ".parquet"); URL goldenFileUrl = getClass().getClassLoader().getResource(goldenResourcePath.toString()); @@ -541,6 +544,9 @@ public void testGoldenFiles(String encoding, String typeName, PrimitiveType prim Schema expectedSchema = new Schema(optional(1, "data", primitiveType)); assertIdenticalFileContents( - new File(goldenFileUrl.toURI()), new File(plainFileUrl.toURI()), expectedSchema, vectorized); + new File(goldenFileUrl.toURI()), + new File(plainFileUrl.toURI()), + expectedSchema, + vectorized); } } From 825623fb60fad7f00d5766f65b5ade64362fab5d Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 18 Aug 2025 11:56:57 -0700 Subject: [PATCH 08/27] revert gradle.properties --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index dacc624a6208..5da56c59de41 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ jmhJsonOutputPath=build/reports/jmh/results.json jmhIncludeRegex=.* systemProp.defaultFlinkVersions=2.0 systemProp.knownFlinkVersions=1.19,1.20,2.0 -systemProp.defaultSparkVersions=4.0,3.5 +systemProp.defaultSparkVersions=4.0 systemProp.knownSparkVersions=3.4,3.5,4.0 systemProp.defaultKafkaVersions=3 systemProp.knownKafkaVersions=3 From 636663496ced05010519990eab1eb643a281077f Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 18 Aug 2025 13:07:35 -0700 Subject: [PATCH 09/27] try fixing lints --- gradle.properties | 2 +- .../parquet/TestParquetVectorizedReads.java | 11 ++++++----- .../parquet/TestParquetVectorizedReads.java | 11 ++++++----- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5da56c59de41..dacc624a6208 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ jmhJsonOutputPath=build/reports/jmh/results.json jmhIncludeRegex=.* systemProp.defaultFlinkVersions=2.0 systemProp.knownFlinkVersions=1.19,1.20,2.0 -systemProp.defaultSparkVersions=4.0 +systemProp.defaultSparkVersions=4.0,3.5 systemProp.knownSparkVersions=3.4,3.5,4.0 systemProp.defaultKafkaVersions=3 systemProp.knownKafkaVersions=3 diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 1daa4c9e6106..55df8ab9752d 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -30,7 +30,6 @@ import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -72,7 +71,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import scala.collection.immutable.HashMap; public class TestParquetVectorizedReads extends AvroDataTestBase { private static final int NUM_ROWS = 200_000; @@ -492,7 +490,10 @@ private void assertIdenticalFileContents( private String rowToJson(StructType schema, InternalRow row) { StringWriter out = new StringWriter(); JacksonGenerator gen = - new JacksonGenerator(schema, out, new JSONOptions(new HashMap<>(), "UTC", "_corrupt")); + new JacksonGenerator( + schema, + out, + new JSONOptions(new scala.collection.immutable.HashMap<>(), "UTC", "_corrupt")); gen.write(row); gen.flush(); return out.toString(); @@ -501,10 +502,10 @@ private String rowToJson(StructType schema, InternalRow row) { private void assertBatchListsEqualByRows( Schema schema, List actual, List expected) { StructType sparkSchema = SparkSchemaUtil.convert(schema); - List actualRows = new ArrayList<>(); + List actualRows = Lists.newArrayList(); actual.forEach( b -> b.rowIterator().forEachRemaining(e -> actualRows.add(rowToJson(sparkSchema, e)))); - List expectedRows = new ArrayList<>(); + List expectedRows = Lists.newArrayList(); expected.forEach( b -> b.rowIterator().forEachRemaining(e -> expectedRows.add(rowToJson(sparkSchema, e)))); assertThat(actualRows) diff --git a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 1daa4c9e6106..55df8ab9752d 100644 --- a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -30,7 +30,6 @@ import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -72,7 +71,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import scala.collection.immutable.HashMap; public class TestParquetVectorizedReads extends AvroDataTestBase { private static final int NUM_ROWS = 200_000; @@ -492,7 +490,10 @@ private void assertIdenticalFileContents( private String rowToJson(StructType schema, InternalRow row) { StringWriter out = new StringWriter(); JacksonGenerator gen = - new JacksonGenerator(schema, out, new JSONOptions(new HashMap<>(), "UTC", "_corrupt")); + new JacksonGenerator( + schema, + out, + new JSONOptions(new scala.collection.immutable.HashMap<>(), "UTC", "_corrupt")); gen.write(row); gen.flush(); return out.toString(); @@ -501,10 +502,10 @@ private String rowToJson(StructType schema, InternalRow row) { private void assertBatchListsEqualByRows( Schema schema, List actual, List expected) { StructType sparkSchema = SparkSchemaUtil.convert(schema); - List actualRows = new ArrayList<>(); + List actualRows = Lists.newArrayList(); actual.forEach( b -> b.rowIterator().forEachRemaining(e -> actualRows.add(rowToJson(sparkSchema, e)))); - List expectedRows = new ArrayList<>(); + List expectedRows = Lists.newArrayList(); expected.forEach( b -> b.rowIterator().forEachRemaining(e -> expectedRows.add(rowToJson(sparkSchema, e)))); assertThat(actualRows) From 52502dfd1c3daf48d7a9f15d91d9fbd6dc35ee3f Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 18 Aug 2025 13:07:52 -0700 Subject: [PATCH 10/27] gradle.properties revert --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index dacc624a6208..5da56c59de41 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ jmhJsonOutputPath=build/reports/jmh/results.json jmhIncludeRegex=.* systemProp.defaultFlinkVersions=2.0 systemProp.knownFlinkVersions=1.19,1.20,2.0 -systemProp.defaultSparkVersions=4.0,3.5 +systemProp.defaultSparkVersions=4.0 systemProp.knownSparkVersions=3.4,3.5,4.0 systemProp.defaultKafkaVersions=3 systemProp.knownKafkaVersions=3 From 2ed723f248df6690f5f2f625c73dbda330b95f21 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 18 Aug 2025 15:37:09 -0700 Subject: [PATCH 11/27] fix assert message --- .../parquet/TestParquetVectorizedReads.java | 9 ++++++--- .../parquet/TestParquetVectorizedReads.java | 12 +++++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 55df8ab9752d..22d9a6b32ab6 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -475,7 +475,10 @@ private void assertIdenticalFileContents( if (vectorized) { assertBatchListsEqualByRows( - schema, (List) actualList, (List) expectedList); + String.format("(Vectorized) Comparison between files failed %s <-> %s", actual, expected), + schema, + (List) actualList, + (List) expectedList); } else { assertThat(actualList) .as("Comparison between files failed %s <-> %s", actual, expected) @@ -500,7 +503,7 @@ private String rowToJson(StructType schema, InternalRow row) { } private void assertBatchListsEqualByRows( - Schema schema, List actual, List expected) { + String message, Schema schema, List actual, List expected) { StructType sparkSchema = SparkSchemaUtil.convert(schema); List actualRows = Lists.newArrayList(); actual.forEach( @@ -509,7 +512,7 @@ private void assertBatchListsEqualByRows( expected.forEach( b -> b.rowIterator().forEachRemaining(e -> expectedRows.add(rowToJson(sparkSchema, e)))); assertThat(actualRows) - .as("(Vectorized) Comparison between files failed %s <-> %s", actual, expected) + .as(message) .hasSameSizeAs(expectedRows) .hasSameElementsAs(expectedRows); } diff --git a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 55df8ab9752d..32187d29536a 100644 --- a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -475,7 +475,10 @@ private void assertIdenticalFileContents( if (vectorized) { assertBatchListsEqualByRows( - schema, (List) actualList, (List) expectedList); + String.format("(Vectorized) Comparison between files failed %s <-> %s", actual, expected), + schema, + (List) actualList, + (List) expectedList); } else { assertThat(actualList) .as("Comparison between files failed %s <-> %s", actual, expected) @@ -500,7 +503,10 @@ private String rowToJson(StructType schema, InternalRow row) { } private void assertBatchListsEqualByRows( - Schema schema, List actual, List expected) { + String message, + Schema schema, + List actual, + List expected) { StructType sparkSchema = SparkSchemaUtil.convert(schema); List actualRows = Lists.newArrayList(); actual.forEach( @@ -509,7 +515,7 @@ private void assertBatchListsEqualByRows( expected.forEach( b -> b.rowIterator().forEachRemaining(e -> expectedRows.add(rowToJson(sparkSchema, e)))); assertThat(actualRows) - .as("(Vectorized) Comparison between files failed %s <-> %s", actual, expected) + .as(message) .hasSameSizeAs(expectedRows) .hasSameElementsAs(expectedRows); } From bb0a58fda76db743ff80f0a5c06c2e981e746bb5 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Tue, 19 Aug 2025 10:22:51 -0700 Subject: [PATCH 12/27] change test logic --- .../parquet/TestParquetVectorizedReads.java | 122 ++++++------------ .../parquet/TestParquetVectorizedReads.java | 87 +++---------- 2 files changed, 59 insertions(+), 150 deletions(-) diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 22d9a6b32ab6..d9c2d4f18fb3 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -38,6 +38,7 @@ import org.apache.iceberg.Schema; import org.apache.iceberg.data.RandomGenericData; import org.apache.iceberg.data.Record; +import org.apache.iceberg.data.parquet.GenericParquetReaders; import org.apache.iceberg.data.parquet.GenericParquetWriter; import org.apache.iceberg.io.CloseableIterable; import org.apache.iceberg.io.FileAppender; @@ -445,97 +446,52 @@ public void testUuidReads() throws Exception { assertRecordsMatch(schema, numRows, data, dataFile, false, BATCH_SIZE); } - private Parquet.ReadBuilder createReadFunc( - Parquet.ReadBuilder readBuilder, Schema schema, boolean vectorized) { - if (vectorized) { - return readBuilder - .project(schema) - .createBatchedReaderFunc( - t -> VectorizedSparkParquetReaders.buildReader(schema, t, ID_TO_CONSTANT, null)); - } else { - return readBuilder - .project(schema) - .createReaderFunc(t -> SparkParquetReaders.buildReader(schema, t, ID_TO_CONSTANT)); - } - } - - @SuppressWarnings("unchecked") - private void assertIdenticalFileContents( - File actual, File expected, Schema schema, boolean vectorized) throws IOException { - try (CloseableIterable actualReader = - createReadFunc(Parquet.read(Files.localInput(actual)), schema, vectorized).build()) { - Iterator actualIterator = actualReader.iterator(); - try (CloseableIterable plainReader = - createReadFunc(Parquet.read(Files.localInput(expected)), schema, vectorized).build()) { - Iterator expectedIterator = plainReader.iterator(); - List expectedList = Lists.newArrayList(); - expectedIterator.forEachRemaining(expectedList::add); - List actualList = Lists.newArrayList(); - actualIterator.forEachRemaining(actualList::add); - - if (vectorized) { - assertBatchListsEqualByRows( - String.format("(Vectorized) Comparison between files failed %s <-> %s", actual, expected), - schema, - (List) actualList, - (List) expectedList); - } else { - assertThat(actualList) - .as("Comparison between files failed %s <-> %s", actual, expected) - .isNotEmpty() - .hasSameSizeAs(expectedList) - .hasSameElementsAs(expectedList); + private void assertIdenticalFileContents( + File actual, File expected, Schema schema, boolean vectorized) throws IOException { + try (CloseableIterable expectedIterator = + Parquet.read(Files.localInput(expected)) + .project(schema) + .createReaderFunc(msgType -> GenericParquetReaders.buildReader(schema, msgType)) + .build()) { + if (vectorized) { + assertRecordsMatch( + schema, + 1000, + expectedIterator, + actual, + false, + BATCH_SIZE); + } else { + try (CloseableIterable actualIterator = Parquet.read(Files.localInput(actual)).project(schema) + .createReaderFunc(msgType -> GenericParquetReaders.buildReader(schema, msgType)).build()) { + assertThat(actualIterator) + .as("Comparison between files failed %s <-> %s", actual, expected) + .isNotEmpty() + .containsExactlyElementsOf(expectedIterator); } } } } - private String rowToJson(StructType schema, InternalRow row) { - StringWriter out = new StringWriter(); - JacksonGenerator gen = - new JacksonGenerator( - schema, - out, - new JSONOptions(new scala.collection.immutable.HashMap<>(), "UTC", "_corrupt")); - gen.write(row); - gen.flush(); - return out.toString(); - } - - private void assertBatchListsEqualByRows( - String message, Schema schema, List actual, List expected) { - StructType sparkSchema = SparkSchemaUtil.convert(schema); - List actualRows = Lists.newArrayList(); - actual.forEach( - b -> b.rowIterator().forEachRemaining(e -> actualRows.add(rowToJson(sparkSchema, e)))); - List expectedRows = Lists.newArrayList(); - expected.forEach( - b -> b.rowIterator().forEachRemaining(e -> expectedRows.add(rowToJson(sparkSchema, e)))); - assertThat(actualRows) - .as(message) - .hasSameSizeAs(expectedRows) - .hasSameElementsAs(expectedRows); - } - static Stream goldenFilesAndEncodings() { return GOLDEN_FILE_ENCODINGS.stream() - .flatMap( - encoding -> - GOLDEN_FILE_TYPES.entrySet().stream() - .flatMap( - e -> - Stream.of(true, false) - .map( - vectorized -> - Arguments.of( - encoding, e.getKey(), e.getValue(), vectorized)))); + .flatMap( + encoding -> + GOLDEN_FILE_TYPES.entrySet().stream() + .flatMap( + e -> + Stream.of(true, false) + .map( + vectorized -> + Arguments.of( + encoding, e.getKey(), e.getValue(), vectorized)))); } @ParameterizedTest @MethodSource("goldenFilesAndEncodings") public void testGoldenFiles( - String encoding, String typeName, PrimitiveType primitiveType, boolean vectorized) - throws Exception { + String encoding, String typeName, PrimitiveType primitiveType, boolean vectorized) + throws Exception { Path goldenResourcePath = Paths.get("encodings", encoding, typeName + ".parquet"); URL goldenFileUrl = getClass().getClassLoader().getResource(goldenResourcePath.toString()); assumeThat(goldenFileUrl).isNotNull().as("type/encoding pair exists"); @@ -548,9 +504,9 @@ public void testGoldenFiles( Schema expectedSchema = new Schema(optional(1, "data", primitiveType)); assertIdenticalFileContents( - new File(goldenFileUrl.toURI()), - new File(plainFileUrl.toURI()), - expectedSchema, - vectorized); + new File(goldenFileUrl.toURI()), + new File(plainFileUrl.toURI()), + expectedSchema, + vectorized); } } diff --git a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 32187d29536a..50c86365610a 100644 --- a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -38,6 +38,7 @@ import org.apache.iceberg.Schema; import org.apache.iceberg.data.RandomGenericData; import org.apache.iceberg.data.Record; +import org.apache.iceberg.data.parquet.GenericParquetReaders; import org.apache.iceberg.data.parquet.GenericParquetWriter; import org.apache.iceberg.io.CloseableIterable; import org.apache.iceberg.io.FileAppender; @@ -445,81 +446,33 @@ public void testUuidReads() throws Exception { assertRecordsMatch(schema, numRows, data, dataFile, false, BATCH_SIZE); } - private Parquet.ReadBuilder createReadFunc( - Parquet.ReadBuilder readBuilder, Schema schema, boolean vectorized) { - if (vectorized) { - return readBuilder - .project(schema) - .createBatchedReaderFunc( - t -> VectorizedSparkParquetReaders.buildReader(schema, t, ID_TO_CONSTANT, null)); - } else { - return readBuilder - .project(schema) - .createReaderFunc(t -> SparkParquetReaders.buildReader(schema, t, ID_TO_CONSTANT)); - } - } - - @SuppressWarnings("unchecked") - private void assertIdenticalFileContents( + private void assertIdenticalFileContents( File actual, File expected, Schema schema, boolean vectorized) throws IOException { - try (CloseableIterable actualReader = - createReadFunc(Parquet.read(Files.localInput(actual)), schema, vectorized).build()) { - Iterator actualIterator = actualReader.iterator(); - try (CloseableIterable plainReader = - createReadFunc(Parquet.read(Files.localInput(expected)), schema, vectorized).build()) { - Iterator expectedIterator = plainReader.iterator(); - List expectedList = Lists.newArrayList(); - expectedIterator.forEachRemaining(expectedList::add); - List actualList = Lists.newArrayList(); - actualIterator.forEachRemaining(actualList::add); - + try (CloseableIterable expectedIterator = + Parquet.read(Files.localInput(expected)) + .project(schema) + .createReaderFunc(msgType -> GenericParquetReaders.buildReader(schema, msgType)) + .build()) { if (vectorized) { - assertBatchListsEqualByRows( - String.format("(Vectorized) Comparison between files failed %s <-> %s", actual, expected), + assertRecordsMatch( schema, - (List) actualList, - (List) expectedList); + 1000, + expectedIterator, + actual, + false, + BATCH_SIZE); } else { - assertThat(actualList) - .as("Comparison between files failed %s <-> %s", actual, expected) - .isNotEmpty() - .hasSameSizeAs(expectedList) - .hasSameElementsAs(expectedList); - } + try (CloseableIterable actualIterator = Parquet.read(Files.localInput(actual)).project(schema) + .createReaderFunc(msgType -> GenericParquetReaders.buildReader(schema, msgType)).build()) { + assertThat(actualIterator) + .as("Comparison between files failed %s <-> %s", actual, expected) + .isNotEmpty() + .containsExactlyElementsOf(expectedIterator); + } } } } - private String rowToJson(StructType schema, InternalRow row) { - StringWriter out = new StringWriter(); - JacksonGenerator gen = - new JacksonGenerator( - schema, - out, - new JSONOptions(new scala.collection.immutable.HashMap<>(), "UTC", "_corrupt")); - gen.write(row); - gen.flush(); - return out.toString(); - } - - private void assertBatchListsEqualByRows( - String message, - Schema schema, - List actual, - List expected) { - StructType sparkSchema = SparkSchemaUtil.convert(schema); - List actualRows = Lists.newArrayList(); - actual.forEach( - b -> b.rowIterator().forEachRemaining(e -> actualRows.add(rowToJson(sparkSchema, e)))); - List expectedRows = Lists.newArrayList(); - expected.forEach( - b -> b.rowIterator().forEachRemaining(e -> expectedRows.add(rowToJson(sparkSchema, e)))); - assertThat(actualRows) - .as(message) - .hasSameSizeAs(expectedRows) - .hasSameElementsAs(expectedRows); - } - static Stream goldenFilesAndEncodings() { return GOLDEN_FILE_ENCODINGS.stream() .flatMap( From 00504ef446146fcc2254e22cbc93777268354a9b Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Tue, 19 Aug 2025 10:42:13 -0700 Subject: [PATCH 13/27] do not hardcode size --- .../data/vectorized/parquet/TestParquetVectorizedReads.java | 5 +++-- .../data/vectorized/parquet/TestParquetVectorizedReads.java | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index d9c2d4f18fb3..41fd4d6234c6 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -454,10 +454,11 @@ private void assertIdenticalFileContents( .createReaderFunc(msgType -> GenericParquetReaders.buildReader(schema, msgType)) .build()) { if (vectorized) { + List expectedRecords = Lists.newArrayList(expectedIterator); assertRecordsMatch( schema, - 1000, - expectedIterator, + expectedRecords.size(), + expectedRecords, actual, false, BATCH_SIZE); diff --git a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 50c86365610a..f7aa613c0938 100644 --- a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -454,10 +454,11 @@ private void assertIdenticalFileContents( .createReaderFunc(msgType -> GenericParquetReaders.buildReader(schema, msgType)) .build()) { if (vectorized) { + List expectedRecords = Lists.newArrayList(expectedIterator); assertRecordsMatch( schema, - 1000, - expectedIterator, + expectedRecords.size(), + expectedRecords, actual, false, BATCH_SIZE); From 1bdf0fcf641b2cc590c685182658510945cdcf25 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 25 Aug 2025 13:15:26 -0700 Subject: [PATCH 14/27] stable rebase --- .../parquet/TestParquetVectorizedReads.java | 73 +++++++++---------- 1 file changed, 34 insertions(+), 39 deletions(-) diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 41fd4d6234c6..3d7fb6966c23 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -26,7 +26,6 @@ import java.io.File; import java.io.IOException; -import java.io.StringWriter; import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; @@ -50,7 +49,6 @@ import org.apache.iceberg.relocated.com.google.common.collect.Iterables; import org.apache.iceberg.relocated.com.google.common.collect.Lists; import org.apache.iceberg.relocated.com.google.common.collect.Maps; -import org.apache.iceberg.spark.SparkSchemaUtil; import org.apache.iceberg.spark.data.AvroDataTestBase; import org.apache.iceberg.spark.data.GenericsHelpers; import org.apache.iceberg.spark.data.RandomData; @@ -64,9 +62,6 @@ import org.apache.parquet.schema.MessageType; import org.apache.parquet.schema.Type; import org.apache.spark.sql.catalyst.InternalRow; -import org.apache.spark.sql.catalyst.json.JSONOptions; -import org.apache.spark.sql.catalyst.json.JacksonGenerator; -import org.apache.spark.sql.types.StructType; import org.apache.spark.sql.vectorized.ColumnarBatch; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -447,28 +442,28 @@ public void testUuidReads() throws Exception { } private void assertIdenticalFileContents( - File actual, File expected, Schema schema, boolean vectorized) throws IOException { + File actual, File expected, Schema schema, boolean vectorized) throws IOException { try (CloseableIterable expectedIterator = - Parquet.read(Files.localInput(expected)) - .project(schema) - .createReaderFunc(msgType -> GenericParquetReaders.buildReader(schema, msgType)) - .build()) { + Parquet.read(Files.localInput(expected)) + .project(schema) + .createReaderFunc(msgType -> GenericParquetReaders.buildReader(schema, msgType)) + .build()) { + List expectedRecords = Lists.newArrayList(expectedIterator); if (vectorized) { - List expectedRecords = Lists.newArrayList(expectedIterator); assertRecordsMatch( - schema, - expectedRecords.size(), - expectedRecords, - actual, - false, - BATCH_SIZE); + schema, expectedRecords.size(), expectedRecords, actual, false, BATCH_SIZE); } else { - try (CloseableIterable actualIterator = Parquet.read(Files.localInput(actual)).project(schema) - .createReaderFunc(msgType -> GenericParquetReaders.buildReader(schema, msgType)).build()) { - assertThat(actualIterator) - .as("Comparison between files failed %s <-> %s", actual, expected) - .isNotEmpty() - .containsExactlyElementsOf(expectedIterator); + try (CloseableIterable actualIterator = + Parquet.read(Files.localInput(actual)) + .project(schema) + .createReaderFunc(msgType -> SparkParquetReaders.buildReader(schema, msgType)) + .build()) { + List actualRecords = Lists.newArrayList(actualIterator); + assertThat(actualRecords).hasSameSizeAs(expectedRecords); + for (int i = 0; i < actualRecords.size(); i++) { + GenericsHelpers.assertEqualsUnsafe( + schema.asStruct(), expectedRecords.get(i), actualRecords.get(i)); + } } } } @@ -476,23 +471,23 @@ private void assertIdenticalFileContents( static Stream goldenFilesAndEncodings() { return GOLDEN_FILE_ENCODINGS.stream() - .flatMap( - encoding -> - GOLDEN_FILE_TYPES.entrySet().stream() - .flatMap( - e -> - Stream.of(true, false) - .map( - vectorized -> - Arguments.of( - encoding, e.getKey(), e.getValue(), vectorized)))); + .flatMap( + encoding -> + GOLDEN_FILE_TYPES.entrySet().stream() + .flatMap( + e -> + Stream.of(true, false) + .map( + vectorized -> + Arguments.of( + encoding, e.getKey(), e.getValue(), vectorized)))); } @ParameterizedTest @MethodSource("goldenFilesAndEncodings") public void testGoldenFiles( - String encoding, String typeName, PrimitiveType primitiveType, boolean vectorized) - throws Exception { + String encoding, String typeName, PrimitiveType primitiveType, boolean vectorized) + throws Exception { Path goldenResourcePath = Paths.get("encodings", encoding, typeName + ".parquet"); URL goldenFileUrl = getClass().getClassLoader().getResource(goldenResourcePath.toString()); assumeThat(goldenFileUrl).isNotNull().as("type/encoding pair exists"); @@ -505,9 +500,9 @@ public void testGoldenFiles( Schema expectedSchema = new Schema(optional(1, "data", primitiveType)); assertIdenticalFileContents( - new File(goldenFileUrl.toURI()), - new File(plainFileUrl.toURI()), - expectedSchema, - vectorized); + new File(goldenFileUrl.toURI()), + new File(plainFileUrl.toURI()), + expectedSchema, + vectorized); } } From 7659cb109c4bab105497ab03d743dd9dd8e50416 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Tue, 26 Aug 2025 21:15:39 -0700 Subject: [PATCH 15/27] move golden files --- .../encodings/DELTA_BINARY_PACKED/int32.parquet | Bin .../encodings/DELTA_BINARY_PACKED/int64.parquet | Bin .../resources/encodings/PLAIN/binary.parquet | Bin .../resources/encodings/PLAIN/boolean.parquet | Bin .../resources/encodings/PLAIN/float.parquet | Bin .../resources/encodings/PLAIN/int32.parquet | Bin .../resources/encodings/PLAIN/int64.parquet | Bin .../resources/encodings/PLAIN/string.parquet | Bin .../encodings/PLAIN_DICTIONARY/binary.parquet | Bin .../encodings/PLAIN_DICTIONARY/float.parquet | Bin .../encodings/PLAIN_DICTIONARY/int32.parquet | Bin .../encodings/PLAIN_DICTIONARY/int64.parquet | Bin .../encodings/PLAIN_DICTIONARY/string.parquet | Bin .../encodings/RLE_DICTIONARY/binary.parquet | Bin .../encodings/RLE_DICTIONARY/float.parquet | Bin .../encodings/RLE_DICTIONARY/int32.parquet | Bin .../encodings/RLE_DICTIONARY/int64.parquet | Bin .../encodings/RLE_DICTIONARY/string.parquet | Bin .../resources/encodings/RLE/boolean.parquet | Bin 364 -> 0 bytes .../encodings/DELTA_BINARY_PACKED/int32.parquet | Bin 2179 -> 0 bytes .../encodings/DELTA_BINARY_PACKED/int64.parquet | Bin 5575 -> 0 bytes .../resources/encodings/PLAIN/binary.parquet | Bin 13046 -> 0 bytes .../resources/encodings/PLAIN/boolean.parquet | Bin 359 -> 0 bytes .../resources/encodings/PLAIN/float.parquet | Bin 4252 -> 0 bytes .../resources/encodings/PLAIN/int32.parquet | Bin 4252 -> 0 bytes .../resources/encodings/PLAIN/int64.parquet | Bin 8276 -> 0 bytes .../resources/encodings/PLAIN/string.parquet | Bin 11782 -> 0 bytes .../encodings/PLAIN_DICTIONARY/binary.parquet | Bin 14329 -> 0 bytes .../encodings/PLAIN_DICTIONARY/float.parquet | Bin 5534 -> 0 bytes .../encodings/PLAIN_DICTIONARY/int32.parquet | Bin 5330 -> 0 bytes .../encodings/PLAIN_DICTIONARY/int64.parquet | Bin 9564 -> 0 bytes .../encodings/PLAIN_DICTIONARY/string.parquet | Bin 3093 -> 0 bytes .../encodings/RLE_DICTIONARY/binary.parquet | Bin 14329 -> 0 bytes .../encodings/RLE_DICTIONARY/float.parquet | Bin 5534 -> 0 bytes .../encodings/RLE_DICTIONARY/int32.parquet | Bin 5330 -> 0 bytes .../encodings/RLE_DICTIONARY/int64.parquet | Bin 9564 -> 0 bytes .../encodings/RLE_DICTIONARY/string.parquet | Bin 3093 -> 0 bytes 37 files changed, 0 insertions(+), 0 deletions(-) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/DELTA_BINARY_PACKED/int32.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/DELTA_BINARY_PACKED/int64.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/PLAIN/binary.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/PLAIN/boolean.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/PLAIN/float.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/PLAIN/int32.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/PLAIN/int64.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/PLAIN/string.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/PLAIN_DICTIONARY/binary.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/PLAIN_DICTIONARY/float.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/PLAIN_DICTIONARY/int32.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/PLAIN_DICTIONARY/int64.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/PLAIN_DICTIONARY/string.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/RLE_DICTIONARY/binary.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/RLE_DICTIONARY/float.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/RLE_DICTIONARY/int32.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/RLE_DICTIONARY/int64.parquet (100%) rename {spark/v3.5/spark => parquet}/src/test/resources/encodings/RLE_DICTIONARY/string.parquet (100%) delete mode 100644 spark/v3.5/spark/src/test/resources/encodings/RLE/boolean.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/DELTA_BINARY_PACKED/int32.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/DELTA_BINARY_PACKED/int64.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/PLAIN/binary.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/PLAIN/boolean.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/PLAIN/float.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/PLAIN/int32.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/PLAIN/int64.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/PLAIN/string.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/PLAIN_DICTIONARY/binary.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/PLAIN_DICTIONARY/float.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/PLAIN_DICTIONARY/int32.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/PLAIN_DICTIONARY/int64.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/PLAIN_DICTIONARY/string.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/RLE_DICTIONARY/binary.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/RLE_DICTIONARY/float.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/RLE_DICTIONARY/int32.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/RLE_DICTIONARY/int64.parquet delete mode 100644 spark/v4.0/spark/src/test/resources/encodings/RLE_DICTIONARY/string.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/DELTA_BINARY_PACKED/int32.parquet b/parquet/src/test/resources/encodings/DELTA_BINARY_PACKED/int32.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/DELTA_BINARY_PACKED/int32.parquet rename to parquet/src/test/resources/encodings/DELTA_BINARY_PACKED/int32.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/DELTA_BINARY_PACKED/int64.parquet b/parquet/src/test/resources/encodings/DELTA_BINARY_PACKED/int64.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/DELTA_BINARY_PACKED/int64.parquet rename to parquet/src/test/resources/encodings/DELTA_BINARY_PACKED/int64.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN/binary.parquet b/parquet/src/test/resources/encodings/PLAIN/binary.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/PLAIN/binary.parquet rename to parquet/src/test/resources/encodings/PLAIN/binary.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN/boolean.parquet b/parquet/src/test/resources/encodings/PLAIN/boolean.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/PLAIN/boolean.parquet rename to parquet/src/test/resources/encodings/PLAIN/boolean.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN/float.parquet b/parquet/src/test/resources/encodings/PLAIN/float.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/PLAIN/float.parquet rename to parquet/src/test/resources/encodings/PLAIN/float.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN/int32.parquet b/parquet/src/test/resources/encodings/PLAIN/int32.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/PLAIN/int32.parquet rename to parquet/src/test/resources/encodings/PLAIN/int32.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN/int64.parquet b/parquet/src/test/resources/encodings/PLAIN/int64.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/PLAIN/int64.parquet rename to parquet/src/test/resources/encodings/PLAIN/int64.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN/string.parquet b/parquet/src/test/resources/encodings/PLAIN/string.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/PLAIN/string.parquet rename to parquet/src/test/resources/encodings/PLAIN/string.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/binary.parquet b/parquet/src/test/resources/encodings/PLAIN_DICTIONARY/binary.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/binary.parquet rename to parquet/src/test/resources/encodings/PLAIN_DICTIONARY/binary.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/float.parquet b/parquet/src/test/resources/encodings/PLAIN_DICTIONARY/float.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/float.parquet rename to parquet/src/test/resources/encodings/PLAIN_DICTIONARY/float.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/int32.parquet b/parquet/src/test/resources/encodings/PLAIN_DICTIONARY/int32.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/int32.parquet rename to parquet/src/test/resources/encodings/PLAIN_DICTIONARY/int32.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/int64.parquet b/parquet/src/test/resources/encodings/PLAIN_DICTIONARY/int64.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/int64.parquet rename to parquet/src/test/resources/encodings/PLAIN_DICTIONARY/int64.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/string.parquet b/parquet/src/test/resources/encodings/PLAIN_DICTIONARY/string.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/PLAIN_DICTIONARY/string.parquet rename to parquet/src/test/resources/encodings/PLAIN_DICTIONARY/string.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/binary.parquet b/parquet/src/test/resources/encodings/RLE_DICTIONARY/binary.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/binary.parquet rename to parquet/src/test/resources/encodings/RLE_DICTIONARY/binary.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/float.parquet b/parquet/src/test/resources/encodings/RLE_DICTIONARY/float.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/float.parquet rename to parquet/src/test/resources/encodings/RLE_DICTIONARY/float.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/int32.parquet b/parquet/src/test/resources/encodings/RLE_DICTIONARY/int32.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/int32.parquet rename to parquet/src/test/resources/encodings/RLE_DICTIONARY/int32.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/int64.parquet b/parquet/src/test/resources/encodings/RLE_DICTIONARY/int64.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/int64.parquet rename to parquet/src/test/resources/encodings/RLE_DICTIONARY/int64.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/string.parquet b/parquet/src/test/resources/encodings/RLE_DICTIONARY/string.parquet similarity index 100% rename from spark/v3.5/spark/src/test/resources/encodings/RLE_DICTIONARY/string.parquet rename to parquet/src/test/resources/encodings/RLE_DICTIONARY/string.parquet diff --git a/spark/v3.5/spark/src/test/resources/encodings/RLE/boolean.parquet b/spark/v3.5/spark/src/test/resources/encodings/RLE/boolean.parquet deleted file mode 100644 index fe4f62455d087ea1b3e8c56bf7870b1ea046ea02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmWG=3^EjD5S_vVL^`4u_(j=3kb!}jfq~%yKVv&q5Mfb}xEN6P9ws#o8=%2J^Til6 zz%WlLXtvAohVtR7~s$lc){@NY@2^H4Y%nprKHZSX5Y=TB4g=P@tPw hRFq$?P?lO$oSC1eU}T^Ngpx8cKnE@a;s9Vc0|3r#XVw4! diff --git a/spark/v4.0/spark/src/test/resources/encodings/DELTA_BINARY_PACKED/int32.parquet b/spark/v4.0/spark/src/test/resources/encodings/DELTA_BINARY_PACKED/int32.parquet deleted file mode 100644 index bc89aa6511a433e0429bcfffd2ef1407a1fd3bf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2179 zcmb7Gi9gg^8~+W1;lstp^0!o*<0 zFkt`?1OQ+N3Q7QhS48^5Sw$d8C{)t+CD3r{8OyhNEziTYPSgM~sx|SoevCTnTH7!u z{rZQ3OOIZt_UZQR^*bl5Pk*wm0urReFCd%J6|%~#JJ!aQzM0>6*J4m;6y?&8N?VLk zNTktv2xZ#3g>MsrzwBp#P=C$%59VVB-GYWv2I(`IDOu>4=7;@~+xK{`9LQ$U50V4s z;0>J@65-+Onz2I6DQP{Qld9EIMoh%62W&s4ypis3So44#vG>TIwNeTLj~zusWdqti zuuG7M(=DT)v*&=#qK)sns@d*tCB0kCzCT+-5+@fC$Bvr1bYTyDr8BG+t&>G#3fUajlOK}(LTnQ1I z3i-H_ccyn1b*vPV#@0(~y&DwaR=R4n!_40sGy8{3xNT6Y3OBvt3nEkldasnQ-($$7D)DK5F60QEQIvHxgJmHxwEmQPw8loNXx+|me`4>+O|Ae zhlt9c7V+^F#VU6RPBN0z;^31?Cvwbg0g;2MFgXLe*1%>GrRjQavtF{ybynjc7p{M| zL5)P!`tmT_%EFSg7Bq@!OCw3yyLxjo^e-+%c@>w-Ur718JwCTf)QOv9DjAr+PLTLy z9D9)*^vt}d$ir)m7x{o=HoLt#B3t@I*hxnm$T5vHCflxA>z1^7Ir^of2p58L^JZjc z|GeksnX*LpN2YYR4 zKMjkoTV;?rL5f!^+e%n*_BFK6Xk~eoW$b8Fh;f41HPB)mW7-5WhjFvJ^a`G!A`&;K zeM=Nu6}zU!F-2*SLD`PO{rl{*D?DQs7O%4yChXG5($|$?H;-3RUSY!(gxdNHM9AMy z$`ok4mi2Dr9emPzdpdvb%Yr(u#*-&#Eb$=6xAR}iFh4=+D`qv^^tQ`I=xE9|UU_>u z|Dd8>6m#>VA4`sax9^nT=})4$p}LQK$Fq5c^}5=B-)H% z7VJOO)mXvJUq4OeI?CS?M|S)NAO=TjPxUwGFIg_-vg|aB+RkooU*I||F$YS8yYo7E z=~}!tu0HB+T+XDHA9ednGOO2wJd<~aktjMw4gG#e?g@@!lwMz!*u}KD*M1DfH8j7UPLljSD#Jg`AP1f%V{R$eStf-%wi5BWz3%r&F>WFLY`tP`rOPj50 zcG}(SI#6%5k0}slYqk=4-w#bwK2~sb?;=B&b^gll(1I!LcV1awFd;1>A}Rf$>Kbs_{mT5LEisrj6} zmUB$TcYpRr`AbC%6tRciWqwdqz}C1q7frPXHyd_G^p>`MwaD;n_v zPg56=2mAU&`T+1DC_)jThy@h+zUsnae4xE?*q#B-ckfifLd<`I|7L;%xPPgB_xLpY zG(n7yX|5rR_?H-fCo99?@O~wjDX@ny1jR!58o;T9`Ow3oXpuV9urM7TIz9BF$^{xd ZA|NzG#ZX_DUl59l{M9z_8VL>o^Ct{W8Pa=YD?w$&9OFTZSXSCY+YpW9U zleF+)WuOii&AERA(#-N(pg8^UGUS&%6v(ho=%38S4f~sUIF~zKiqljX)^K%tHWaEp$V>Ds)7Hch7*nZLwyxQki!NOOsEl@_!7i$ESiV9lP z>ER|dDAWkigo}2i2B2*`(-a3VPj3OAq8uHR!SOi*%}MeiMt?!7#zuW4{g^!OtY)Ec>vU?uJ^;xr_tGt{6Yd(aHxHl6T;S--pbgKvFo zGTe)|(I%+Rv%Hy-q46O!so$0BTqSX`){^RSP1M1HuIZ0p<@>MApsikPg5-~vo}?GD z<%vYEO_YgPDM=aB#M|DM`+>AN(*d%_Rw(J?G*nEk^E}x5xO#;dw_-q^`q1%?v@ue z)RVI=KJbqJa29M%NEwD=n;I1|kh~d76P&+kL64GsM0!$Jk%JaqV(2#onyY5*0!z~n z2UPL&fj8QA+_Hxrwae-NQ?*?DiKRRd>0(0prp`9ToY=ijU~YWgZZNebCL` d69* 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 diff --git a/spark/v4.0/spark/src/test/resources/encodings/PLAIN/binary.parquet b/spark/v4.0/spark/src/test/resources/encodings/PLAIN/binary.parquet deleted file mode 100644 index 5e9402f654e25af1bff0355a7fd4de5a193d2f3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13046 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 eCBLj5dA|MU`1~CBDOJ(!` diff --git a/spark/v4.0/spark/src/test/resources/encodings/PLAIN/float.parquet b/spark/v4.0/spark/src/test/resources/encodings/PLAIN/float.parquet deleted file mode 100644 index 5ea57ce31d4b95392f86aa863e7d8b2a1df80d6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4252 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 diff --git a/spark/v4.0/spark/src/test/resources/encodings/PLAIN/int32.parquet b/spark/v4.0/spark/src/test/resources/encodings/PLAIN/int32.parquet deleted file mode 100644 index 225b9903923dc946a35c8136067cfc54c5a9abe2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4252 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 T4^vchX7p7v|81H1{|WvNd7%TE diff --git a/spark/v4.0/spark/src/test/resources/encodings/PLAIN/string.parquet b/spark/v4.0/spark/src/test/resources/encodings/PLAIN/string.parquet deleted file mode 100644 index 57785ff2639f34fa28a932816774a7df9d330a00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11782 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
$oC@B(zV~OF4ko8S?ybDds3Hm#(ZJ_oW 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 CS2}nA diff --git a/spark/v4.0/spark/src/test/resources/encodings/PLAIN_DICTIONARY/float.parquet b/spark/v4.0/spark/src/test/resources/encodings/PLAIN_DICTIONARY/float.parquet deleted file mode 100644 index 3694c4a207a5dcd14b3c8b0ccded9a560f556f44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5534 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 diff --git a/spark/v4.0/spark/src/test/resources/encodings/PLAIN_DICTIONARY/string.parquet b/spark/v4.0/spark/src/test/resources/encodings/PLAIN_DICTIONARY/string.parquet deleted file mode 100644 index c66dd5342e9cb57bbc5a6d3e67275a4310e7be0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3093 zcmYjUSyvj{5^hle1p^L^w4xGG8~_InI7CGp;*fw6iIONrkwH*UP@IUygE1P1XpAK0 zB(L}RJlvf2Sd_fpT$OebAHpX%7hMgJwCsWOTx zq$p|?B4a1poD{LslpxS2IRTa+nS{eFQ2>e%LHHmq;B)}N@+J|eRv@tFgRw7s30A=%Kx7B73lIT-C&a#>=VF6X zS`fq*K!9-m0pXmmBOn4CVMr2y>0|GvL2H6)vh{*+J7XmHW zzL0__5v&t1CS=oy&+Q&=*F?b=UmNxXN}Pu%76=V8z?|a(s=`*GjS+z%*9D{v_(o!1 zAV3NV1fPD8<|@gK@W)%OVnIkQDF8t}Vr*dtVu|=x0YE$oFysr0U|c;h0>zz5cEplc zvk1QU6tFJdM5w}z*u4jU2wxz@yM#lrU4aoe0mF9#FhaUX zzD06~CEg08H4s$HAxWZWNleAl0P$w-o;QRPPG=whJjoW+LiR%;ScqSU%J~PHoIZFL zG7heM^Fl2IfkSREMq_bPbBngsWHwe=+G^V^c^#5Y ziS;*Ip}o1Q+uqY#_oT0Xz%i(D4%vrCMxR=kM#tFD_{5~l##B9{^=-1}6)ugn*X}Nx zn)c{lbkB5nUyd1O=Vp8kYy0G@7q1(p<`<@&UH7Ag=JH_Z z<%>dB|8lJ?95LwLjI2gW0iTZ-+p-nCOBGtAfZ?GEj!_YX3Ow?&b|qjCSc4bM@B-ewzFI5w_C4yWx7xo`CM zY>R6sqBv>T?tB0Gbl|8(o@rl+GlR9Mo)2e(`pAb^$UEpP_qNEZ?dNqL%j~1?<_>pC z-(4t!w&B#JEPYjc9WCFyZaix%R-F6y5}B^~75j3-_@~Um(#`w+iSu3e-dcG@ ztRYADDNf#7c8;8frr9q+L;rsDaY5L9r_Rf_HKf1Y9VQCr<{~yj{#bqfl|OBM>+N+u zO5HrMZNz1-<7w}DUd#HfH38}{3woAs;EKEAs_`5!r4mM4NbV;_TP$3-nG7vqG*pX`y$vWvr}q$RMmwYjI?4R3A7HaGOvjyCp((Sh23*k2F(55fNc8aP!m diff --git a/spark/v4.0/spark/src/test/resources/encodings/RLE_DICTIONARY/binary.parquet b/spark/v4.0/spark/src/test/resources/encodings/RLE_DICTIONARY/binary.parquet deleted file mode 100644 index 5cd26dbb814f38415655fc860f8a0433ed28edab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14329 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
$oC@B(zV~OF4ko8S?ybDds3Hm#(ZJ_oW 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 CS2}nA diff --git a/spark/v4.0/spark/src/test/resources/encodings/RLE_DICTIONARY/float.parquet b/spark/v4.0/spark/src/test/resources/encodings/RLE_DICTIONARY/float.parquet deleted file mode 100644 index 3694c4a207a5dcd14b3c8b0ccded9a560f556f44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5534 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 diff --git a/spark/v4.0/spark/src/test/resources/encodings/RLE_DICTIONARY/string.parquet b/spark/v4.0/spark/src/test/resources/encodings/RLE_DICTIONARY/string.parquet deleted file mode 100644 index c66dd5342e9cb57bbc5a6d3e67275a4310e7be0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3093 zcmYjUSyvj{5^hle1p^L^w4xGG8~_InI7CGp;*fw6iIONrkwH*UP@IUygE1P1XpAK0 zB(L}RJlvf2Sd_fpT$OebAHpX%7hMgJwCsWOTx zq$p|?B4a1poD{LslpxS2IRTa+nS{eFQ2>e%LHHmq;B)}N@+J|eRv@tFgRw7s30A=%Kx7B73lIT-C&a#>=VF6X zS`fq*K!9-m0pXmmBOn4CVMr2y>0|GvL2H6)vh{*+J7XmHW zzL0__5v&t1CS=oy&+Q&=*F?b=UmNxXN}Pu%76=V8z?|a(s=`*GjS+z%*9D{v_(o!1 zAV3NV1fPD8<|@gK@W)%OVnIkQDF8t}Vr*dtVu|=x0YE$oFysr0U|c;h0>zz5cEplc zvk1QU6tFJdM5w}z*u4jU2wxz@yM#lrU4aoe0mF9#FhaUX zzD06~CEg08H4s$HAxWZWNleAl0P$w-o;QRPPG=whJjoW+LiR%;ScqSU%J~PHoIZFL zG7heM^Fl2IfkSREMq_bPbBngsWHwe=+G^V^c^#5Y ziS;*Ip}o1Q+uqY#_oT0Xz%i(D4%vrCMxR=kM#tFD_{5~l##B9{^=-1}6)ugn*X}Nx zn)c{lbkB5nUyd1O=Vp8kYy0G@7q1(p<`<@&UH7Ag=JH_Z z<%>dB|8lJ?95LwLjI2gW0iTZ-+p-nCOBGtAfZ?GEj!_YX3Ow?&b|qjCSc4bM@B-ewzFI5w_C4yWx7xo`CM zY>R6sqBv>T?tB0Gbl|8(o@rl+GlR9Mo)2e(`pAb^$UEpP_qNEZ?dNqL%j~1?<_>pC z-(4t!w&B#JEPYjc9WCFyZaix%R-F6y5}B^~75j3-_@~Um(#`w+iSu3e-dcG@ ztRYADDNf#7c8;8frr9q+L;rsDaY5L9r_Rf_HKf1Y9VQCr<{~yj{#bqfl|OBM>+N+u zO5HrMZNz1-<7w}DUd#HfH38}{3woAs;EKEAs_`5!r4mM4NbV;_TP$3-nG7vqG*pX`y$vWvr}q$RMmwYjI?4R3A7HaGOvjyCp((Sh23*k2F(55fNc8aP!m From b98a9818f3ad6eb1822cc911ecec036f917c1a2e Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Wed, 3 Sep 2025 13:16:13 -0700 Subject: [PATCH 16/27] stable --- build.gradle | 3 +++ .../DELTA_BINARY_PACKED/int32.parquet | Bin .../DELTA_BINARY_PACKED/int64.parquet | Bin .../resources/encodings/PLAIN/binary.parquet | Bin .../resources/encodings/PLAIN/boolean.parquet | Bin .../resources/encodings/PLAIN/float.parquet | Bin .../resources/encodings/PLAIN/int32.parquet | Bin .../resources/encodings/PLAIN/int64.parquet | Bin .../resources/encodings/PLAIN/string.parquet | Bin .../encodings/PLAIN_DICTIONARY/binary.parquet | Bin .../encodings/PLAIN_DICTIONARY/float.parquet | Bin .../encodings/PLAIN_DICTIONARY/int32.parquet | Bin .../encodings/PLAIN_DICTIONARY/int64.parquet | Bin .../encodings/PLAIN_DICTIONARY/string.parquet | Bin .../encodings/RLE_DICTIONARY/binary.parquet | Bin .../encodings/RLE_DICTIONARY/float.parquet | Bin .../encodings/RLE_DICTIONARY/int32.parquet | Bin .../encodings/RLE_DICTIONARY/int64.parquet | Bin .../encodings/RLE_DICTIONARY/string.parquet | Bin spark/v4.0/build.gradle | 2 ++ .../parquet/TestParquetVectorizedReads.java | 21 ++++++++++++++++-- 21 files changed, 24 insertions(+), 2 deletions(-) rename parquet/src/{test => testFixtures}/resources/encodings/DELTA_BINARY_PACKED/int32.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/DELTA_BINARY_PACKED/int64.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/PLAIN/binary.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/PLAIN/boolean.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/PLAIN/float.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/PLAIN/int32.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/PLAIN/int64.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/PLAIN/string.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/PLAIN_DICTIONARY/binary.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/PLAIN_DICTIONARY/float.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/PLAIN_DICTIONARY/int32.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/PLAIN_DICTIONARY/int64.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/PLAIN_DICTIONARY/string.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/RLE_DICTIONARY/binary.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/RLE_DICTIONARY/float.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/RLE_DICTIONARY/int32.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/RLE_DICTIONARY/int64.parquet (100%) rename parquet/src/{test => testFixtures}/resources/encodings/RLE_DICTIONARY/string.parquet (100%) diff --git a/build.gradle b/build.gradle index 6bc052885fc4..e2de7d0e6752 100644 --- a/build.gradle +++ b/build.gradle @@ -869,6 +869,9 @@ project(':iceberg-orc') { } project(':iceberg-parquet') { + apply plugin: 'java-library' + apply plugin: 'java-test-fixtures' + test { useJUnitPlatform() } diff --git a/parquet/src/test/resources/encodings/DELTA_BINARY_PACKED/int32.parquet b/parquet/src/testFixtures/resources/encodings/DELTA_BINARY_PACKED/int32.parquet similarity index 100% rename from parquet/src/test/resources/encodings/DELTA_BINARY_PACKED/int32.parquet rename to parquet/src/testFixtures/resources/encodings/DELTA_BINARY_PACKED/int32.parquet diff --git a/parquet/src/test/resources/encodings/DELTA_BINARY_PACKED/int64.parquet b/parquet/src/testFixtures/resources/encodings/DELTA_BINARY_PACKED/int64.parquet similarity index 100% rename from parquet/src/test/resources/encodings/DELTA_BINARY_PACKED/int64.parquet rename to parquet/src/testFixtures/resources/encodings/DELTA_BINARY_PACKED/int64.parquet diff --git a/parquet/src/test/resources/encodings/PLAIN/binary.parquet b/parquet/src/testFixtures/resources/encodings/PLAIN/binary.parquet similarity index 100% rename from parquet/src/test/resources/encodings/PLAIN/binary.parquet rename to parquet/src/testFixtures/resources/encodings/PLAIN/binary.parquet diff --git a/parquet/src/test/resources/encodings/PLAIN/boolean.parquet b/parquet/src/testFixtures/resources/encodings/PLAIN/boolean.parquet similarity index 100% rename from parquet/src/test/resources/encodings/PLAIN/boolean.parquet rename to parquet/src/testFixtures/resources/encodings/PLAIN/boolean.parquet diff --git a/parquet/src/test/resources/encodings/PLAIN/float.parquet b/parquet/src/testFixtures/resources/encodings/PLAIN/float.parquet similarity index 100% rename from parquet/src/test/resources/encodings/PLAIN/float.parquet rename to parquet/src/testFixtures/resources/encodings/PLAIN/float.parquet diff --git a/parquet/src/test/resources/encodings/PLAIN/int32.parquet b/parquet/src/testFixtures/resources/encodings/PLAIN/int32.parquet similarity index 100% rename from parquet/src/test/resources/encodings/PLAIN/int32.parquet rename to parquet/src/testFixtures/resources/encodings/PLAIN/int32.parquet diff --git a/parquet/src/test/resources/encodings/PLAIN/int64.parquet b/parquet/src/testFixtures/resources/encodings/PLAIN/int64.parquet similarity index 100% rename from parquet/src/test/resources/encodings/PLAIN/int64.parquet rename to parquet/src/testFixtures/resources/encodings/PLAIN/int64.parquet diff --git a/parquet/src/test/resources/encodings/PLAIN/string.parquet b/parquet/src/testFixtures/resources/encodings/PLAIN/string.parquet similarity index 100% rename from parquet/src/test/resources/encodings/PLAIN/string.parquet rename to parquet/src/testFixtures/resources/encodings/PLAIN/string.parquet diff --git a/parquet/src/test/resources/encodings/PLAIN_DICTIONARY/binary.parquet b/parquet/src/testFixtures/resources/encodings/PLAIN_DICTIONARY/binary.parquet similarity index 100% rename from parquet/src/test/resources/encodings/PLAIN_DICTIONARY/binary.parquet rename to parquet/src/testFixtures/resources/encodings/PLAIN_DICTIONARY/binary.parquet diff --git a/parquet/src/test/resources/encodings/PLAIN_DICTIONARY/float.parquet b/parquet/src/testFixtures/resources/encodings/PLAIN_DICTIONARY/float.parquet similarity index 100% rename from parquet/src/test/resources/encodings/PLAIN_DICTIONARY/float.parquet rename to parquet/src/testFixtures/resources/encodings/PLAIN_DICTIONARY/float.parquet diff --git a/parquet/src/test/resources/encodings/PLAIN_DICTIONARY/int32.parquet b/parquet/src/testFixtures/resources/encodings/PLAIN_DICTIONARY/int32.parquet similarity index 100% rename from parquet/src/test/resources/encodings/PLAIN_DICTIONARY/int32.parquet rename to parquet/src/testFixtures/resources/encodings/PLAIN_DICTIONARY/int32.parquet diff --git a/parquet/src/test/resources/encodings/PLAIN_DICTIONARY/int64.parquet b/parquet/src/testFixtures/resources/encodings/PLAIN_DICTIONARY/int64.parquet similarity index 100% rename from parquet/src/test/resources/encodings/PLAIN_DICTIONARY/int64.parquet rename to parquet/src/testFixtures/resources/encodings/PLAIN_DICTIONARY/int64.parquet diff --git a/parquet/src/test/resources/encodings/PLAIN_DICTIONARY/string.parquet b/parquet/src/testFixtures/resources/encodings/PLAIN_DICTIONARY/string.parquet similarity index 100% rename from parquet/src/test/resources/encodings/PLAIN_DICTIONARY/string.parquet rename to parquet/src/testFixtures/resources/encodings/PLAIN_DICTIONARY/string.parquet diff --git a/parquet/src/test/resources/encodings/RLE_DICTIONARY/binary.parquet b/parquet/src/testFixtures/resources/encodings/RLE_DICTIONARY/binary.parquet similarity index 100% rename from parquet/src/test/resources/encodings/RLE_DICTIONARY/binary.parquet rename to parquet/src/testFixtures/resources/encodings/RLE_DICTIONARY/binary.parquet diff --git a/parquet/src/test/resources/encodings/RLE_DICTIONARY/float.parquet b/parquet/src/testFixtures/resources/encodings/RLE_DICTIONARY/float.parquet similarity index 100% rename from parquet/src/test/resources/encodings/RLE_DICTIONARY/float.parquet rename to parquet/src/testFixtures/resources/encodings/RLE_DICTIONARY/float.parquet diff --git a/parquet/src/test/resources/encodings/RLE_DICTIONARY/int32.parquet b/parquet/src/testFixtures/resources/encodings/RLE_DICTIONARY/int32.parquet similarity index 100% rename from parquet/src/test/resources/encodings/RLE_DICTIONARY/int32.parquet rename to parquet/src/testFixtures/resources/encodings/RLE_DICTIONARY/int32.parquet diff --git a/parquet/src/test/resources/encodings/RLE_DICTIONARY/int64.parquet b/parquet/src/testFixtures/resources/encodings/RLE_DICTIONARY/int64.parquet similarity index 100% rename from parquet/src/test/resources/encodings/RLE_DICTIONARY/int64.parquet rename to parquet/src/testFixtures/resources/encodings/RLE_DICTIONARY/int64.parquet diff --git a/parquet/src/test/resources/encodings/RLE_DICTIONARY/string.parquet b/parquet/src/testFixtures/resources/encodings/RLE_DICTIONARY/string.parquet similarity index 100% rename from parquet/src/test/resources/encodings/RLE_DICTIONARY/string.parquet rename to parquet/src/testFixtures/resources/encodings/RLE_DICTIONARY/string.parquet diff --git a/spark/v4.0/build.gradle b/spark/v4.0/build.gradle index 9c7ea06f9938..825bd17010ec 100644 --- a/spark/v4.0/build.gradle +++ b/spark/v4.0/build.gradle @@ -117,6 +117,7 @@ project(":iceberg-spark:iceberg-spark-${sparkMajorVersion}_${scalaVersion}") { } testImplementation libs.sqlite.jdbc testImplementation libs.awaitility + testImplementation(testFixtures(project(':iceberg-parquet'))) // runtime dependencies for running REST Catalog based integration test testRuntimeOnly libs.jetty.servlet } @@ -190,6 +191,7 @@ project(":iceberg-spark:iceberg-spark-extensions-${sparkMajorVersion}_${scalaVer testImplementation libs.parquet.hadoop testImplementation libs.awaitility testImplementation "org.apache.datafusion:comet-spark-spark3.5_2.13:${libs.versions.comet.get()}" + testImplementation(testFixtures(project(':iceberg-parquet'))) // Required because we remove antlr plugin dependencies from the compile configuration, see note above runtimeOnly libs.antlr.runtime413 diff --git a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index a26496d4e24d..51c26cd84319 100644 --- a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -18,6 +18,7 @@ */ package org.apache.iceberg.spark.data.vectorized.parquet; +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; import static org.apache.iceberg.types.Types.NestedField.optional; import static org.apache.iceberg.types.Types.NestedField.required; import static org.assertj.core.api.Assertions.assertThat; @@ -26,6 +27,8 @@ import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; @@ -493,6 +496,20 @@ static Stream goldenFilesAndEncodings() { encoding, e.getKey(), e.getValue(), vectorized)))); } + private File resourceUrlToLocalFile(URL url) throws IOException, URISyntaxException { + if ("file".equals(url.getProtocol())) { + return Paths.get(url.toURI()).toFile(); + } + String name = Paths.get(url.getPath()).getFileName().toString(); // e.g., string.parquet + String suffix = name.contains(".") ? name.substring(name.lastIndexOf('.')) : ""; + Path tmp = java.nio.file.Files.createTempFile("golden-", suffix); + try (InputStream in = url.openStream()) { + java.nio.file.Files.copy(in, tmp, REPLACE_EXISTING); + } + tmp.toFile().deleteOnExit(); + return tmp.toFile(); + } + @ParameterizedTest @MethodSource("goldenFilesAndEncodings") public void testGoldenFiles( @@ -510,8 +527,8 @@ public void testGoldenFiles( Schema expectedSchema = new Schema(optional(1, "data", primitiveType)); assertIdenticalFileContents( - new File(goldenFileUrl.toURI()), - new File(plainFileUrl.toURI()), + resourceUrlToLocalFile(goldenFileUrl), + resourceUrlToLocalFile(plainFileUrl), expectedSchema, vectorized); } From 6a25bff7edcadc2a869789bc15a97d325467baa0 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Wed, 3 Sep 2025 13:25:50 -0700 Subject: [PATCH 17/27] fix dependencies --- spark/v3.5/build.gradle | 2 ++ .../parquet/TestParquetVectorizedReads.java | 24 +++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/spark/v3.5/build.gradle b/spark/v3.5/build.gradle index 69700d84366d..125d9e9c9276 100644 --- a/spark/v3.5/build.gradle +++ b/spark/v3.5/build.gradle @@ -112,6 +112,7 @@ project(":iceberg-spark:iceberg-spark-${sparkMajorVersion}_${scalaVersion}") { } testImplementation libs.sqlite.jdbc testImplementation libs.awaitility + testImplementation(testFixtures(project(':iceberg-parquet'))) // runtime dependencies for running REST Catalog based integration test testRuntimeOnly libs.jetty.servlet } @@ -185,6 +186,7 @@ project(":iceberg-spark:iceberg-spark-extensions-${sparkMajorVersion}_${scalaVer testImplementation libs.parquet.hadoop testImplementation libs.awaitility testImplementation "org.apache.datafusion:comet-spark-spark${sparkMajorVersion}_${scalaVersion}:${libs.versions.comet.get()}" + testImplementation(testFixtures(project(':iceberg-parquet'))) // Required because we remove antlr plugin dependencies from the compile configuration, see note above runtimeOnly libs.antlr.runtime diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index e9af52d819d2..ade266daae68 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -18,6 +18,7 @@ */ package org.apache.iceberg.spark.data.vectorized.parquet; +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; import static org.apache.iceberg.types.Types.NestedField.optional; import static org.apache.iceberg.types.Types.NestedField.required; import static org.assertj.core.api.Assertions.assertThat; @@ -26,18 +27,17 @@ import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Iterator; import java.util.List; import java.util.Map; -<<<<<<< HEAD import java.util.stream.Stream; -======= import java.util.function.Consumer; import org.apache.arrow.memory.BufferAllocator; ->>>>>>> 170189e17ca0fd423e690d0de52380fa092177fd import org.apache.iceberg.Files; import org.apache.iceberg.Schema; import org.apache.iceberg.arrow.ArrowAllocation; @@ -510,6 +510,20 @@ static Stream goldenFilesAndEncodings() { encoding, e.getKey(), e.getValue(), vectorized)))); } + private File resourceUrlToLocalFile(URL url) throws IOException, URISyntaxException { + if ("file".equals(url.getProtocol())) { + return Paths.get(url.toURI()).toFile(); + } + String name = Paths.get(url.getPath()).getFileName().toString(); // e.g., string.parquet + String suffix = name.contains(".") ? name.substring(name.lastIndexOf('.')) : ""; + Path tmp = java.nio.file.Files.createTempFile("golden-", suffix); + try (InputStream in = url.openStream()) { + java.nio.file.Files.copy(in, tmp, REPLACE_EXISTING); + } + tmp.toFile().deleteOnExit(); + return tmp.toFile(); + } + @ParameterizedTest @MethodSource("goldenFilesAndEncodings") public void testGoldenFiles( @@ -527,8 +541,8 @@ public void testGoldenFiles( Schema expectedSchema = new Schema(optional(1, "data", primitiveType)); assertIdenticalFileContents( - new File(goldenFileUrl.toURI()), - new File(plainFileUrl.toURI()), + resourceUrlToLocalFile(goldenFileUrl), + resourceUrlToLocalFile(plainFileUrl), expectedSchema, vectorized); } From cf1167cf7ef2e53338e86f0b3093ff58524831b1 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Wed, 3 Sep 2025 13:47:56 -0700 Subject: [PATCH 18/27] spotless --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 5da56c59de41..dacc624a6208 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ jmhJsonOutputPath=build/reports/jmh/results.json jmhIncludeRegex=.* systemProp.defaultFlinkVersions=2.0 systemProp.knownFlinkVersions=1.19,1.20,2.0 -systemProp.defaultSparkVersions=4.0 +systemProp.defaultSparkVersions=4.0,3.5 systemProp.knownSparkVersions=3.4,3.5,4.0 systemProp.defaultKafkaVersions=3 systemProp.knownKafkaVersions=3 From b1eeb46d1d28f6d2136033b6c12e7452f390f31f Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Wed, 3 Sep 2025 13:48:09 -0700 Subject: [PATCH 19/27] undo project change --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index dacc624a6208..5da56c59de41 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ jmhJsonOutputPath=build/reports/jmh/results.json jmhIncludeRegex=.* systemProp.defaultFlinkVersions=2.0 systemProp.knownFlinkVersions=1.19,1.20,2.0 -systemProp.defaultSparkVersions=4.0,3.5 +systemProp.defaultSparkVersions=4.0 systemProp.knownSparkVersions=3.4,3.5,4.0 systemProp.defaultKafkaVersions=3 systemProp.knownKafkaVersions=3 From f736c5121d2b1c2502df9a3ff0cacd67c2419f80 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Wed, 3 Sep 2025 14:15:33 -0700 Subject: [PATCH 20/27] spotless again --- .../vectorized/parquet/TestParquetVectorizedReads.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index ade266daae68..485770a298ac 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -35,8 +35,8 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.stream.Stream; import java.util.function.Consumer; +import java.util.stream.Stream; import org.apache.arrow.memory.BufferAllocator; import org.apache.iceberg.Files; import org.apache.iceberg.Schema; @@ -456,13 +456,13 @@ public void testUuidReads() throws Exception { protected void assertNoLeak(String testName, Consumer testFunction) { BufferAllocator allocator = - ArrowAllocation.rootAllocator().newChildAllocator(testName, 0, Long.MAX_VALUE); + ArrowAllocation.rootAllocator().newChildAllocator(testName, 0, Long.MAX_VALUE); try { testFunction.accept(allocator); assertThat(allocator.getAllocatedMemory()) - .as( - "Should have released all memory prior to closing. Expected to find 0 bytes of memory in use.") - .isEqualTo(0L); + .as( + "Should have released all memory prior to closing. Expected to find 0 bytes of memory in use.") + .isEqualTo(0L); } finally { allocator.close(); } From 1da8ef3141f3189e6a4bb5b5707d02077979c909 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Tue, 9 Sep 2025 22:23:26 -0700 Subject: [PATCH 21/27] add whitespaces --- .../data/vectorized/parquet/TestParquetVectorizedReads.java | 1 + .../data/vectorized/parquet/TestParquetVectorizedReads.java | 1 + 2 files changed, 2 insertions(+) diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 485770a298ac..c81139dd520c 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -514,6 +514,7 @@ private File resourceUrlToLocalFile(URL url) throws IOException, URISyntaxExcept if ("file".equals(url.getProtocol())) { return Paths.get(url.toURI()).toFile(); } + String name = Paths.get(url.getPath()).getFileName().toString(); // e.g., string.parquet String suffix = name.contains(".") ? name.substring(name.lastIndexOf('.')) : ""; Path tmp = java.nio.file.Files.createTempFile("golden-", suffix); diff --git a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 51c26cd84319..ce30abf8ad45 100644 --- a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -500,6 +500,7 @@ private File resourceUrlToLocalFile(URL url) throws IOException, URISyntaxExcept if ("file".equals(url.getProtocol())) { return Paths.get(url.toURI()).toFile(); } + String name = Paths.get(url.getPath()).getFileName().toString(); // e.g., string.parquet String suffix = name.contains(".") ? name.substring(name.lastIndexOf('.')) : ""; Path tmp = java.nio.file.Files.createTempFile("golden-", suffix); From 436f78953456e5fd251f45aea3b425ee41987458 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Tue, 16 Sep 2025 13:38:31 -0700 Subject: [PATCH 22/27] better temp file --- .../vectorized/parquet/TestParquetVectorizedReads.java | 7 +------ .../vectorized/parquet/TestParquetVectorizedReads.java | 7 +------ 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index c81139dd520c..edc32a02e308 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -517,12 +517,7 @@ private File resourceUrlToLocalFile(URL url) throws IOException, URISyntaxExcept String name = Paths.get(url.getPath()).getFileName().toString(); // e.g., string.parquet String suffix = name.contains(".") ? name.substring(name.lastIndexOf('.')) : ""; - Path tmp = java.nio.file.Files.createTempFile("golden-", suffix); - try (InputStream in = url.openStream()) { - java.nio.file.Files.copy(in, tmp, REPLACE_EXISTING); - } - tmp.toFile().deleteOnExit(); - return tmp.toFile(); + return File.createTempFile("golden-", suffix, temp.toFile()); } @ParameterizedTest diff --git a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index ce30abf8ad45..6185112c45bb 100644 --- a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -503,12 +503,7 @@ private File resourceUrlToLocalFile(URL url) throws IOException, URISyntaxExcept String name = Paths.get(url.getPath()).getFileName().toString(); // e.g., string.parquet String suffix = name.contains(".") ? name.substring(name.lastIndexOf('.')) : ""; - Path tmp = java.nio.file.Files.createTempFile("golden-", suffix); - try (InputStream in = url.openStream()) { - java.nio.file.Files.copy(in, tmp, REPLACE_EXISTING); - } - tmp.toFile().deleteOnExit(); - return tmp.toFile(); + return File.createTempFile("golden-", suffix, temp.toFile()); } @ParameterizedTest From dd250dcea3fe4e4e81310c035a536e98968ab5ca Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Tue, 16 Sep 2025 21:42:07 -0700 Subject: [PATCH 23/27] fix --- .../data/vectorized/parquet/TestParquetVectorizedReads.java | 6 +++++- .../data/vectorized/parquet/TestParquetVectorizedReads.java | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index edc32a02e308..bb95811acc12 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -517,7 +517,11 @@ private File resourceUrlToLocalFile(URL url) throws IOException, URISyntaxExcept String name = Paths.get(url.getPath()).getFileName().toString(); // e.g., string.parquet String suffix = name.contains(".") ? name.substring(name.lastIndexOf('.')) : ""; - return File.createTempFile("golden-", suffix, temp.toFile()); + File tmp = File.createTempFile("golden-", suffix, temp.toFile()); + try (InputStream in = url.openStream()) { + java.nio.file.Files.copy(in, tmp.toPath(), REPLACE_EXISTING); + } + return tmp; } @ParameterizedTest diff --git a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 6185112c45bb..8baf8d4eab07 100644 --- a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -503,7 +503,11 @@ private File resourceUrlToLocalFile(URL url) throws IOException, URISyntaxExcept String name = Paths.get(url.getPath()).getFileName().toString(); // e.g., string.parquet String suffix = name.contains(".") ? name.substring(name.lastIndexOf('.')) : ""; - return File.createTempFile("golden-", suffix, temp.toFile()); + File tmp = File.createTempFile("golden-", suffix, temp.toFile()); + try (InputStream in = url.openStream()) { + java.nio.file.Files.copy(in, tmp.toPath(), REPLACE_EXISTING); + } + return tmp; } @ParameterizedTest From 908d193653375ddd2ce9873b64876a2f91d05fa4 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Wed, 17 Sep 2025 00:02:36 -0700 Subject: [PATCH 24/27] address nits --- build.gradle | 1 - gradle.properties | 2 +- .../vectorized/parquet/TestParquetVectorizedReads.java | 7 +++---- .../vectorized/parquet/TestParquetVectorizedReads.java | 7 +++---- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 946325d14aa6..ba15f59d5fd8 100644 --- a/build.gradle +++ b/build.gradle @@ -869,7 +869,6 @@ project(':iceberg-orc') { } project(':iceberg-parquet') { - apply plugin: 'java-library' apply plugin: 'java-test-fixtures' test { diff --git a/gradle.properties b/gradle.properties index 5da56c59de41..dacc624a6208 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ jmhJsonOutputPath=build/reports/jmh/results.json jmhIncludeRegex=.* systemProp.defaultFlinkVersions=2.0 systemProp.knownFlinkVersions=1.19,1.20,2.0 -systemProp.defaultSparkVersions=4.0 +systemProp.defaultSparkVersions=4.0,3.5 systemProp.knownSparkVersions=3.4,3.5,4.0 systemProp.defaultKafkaVersions=3 systemProp.knownKafkaVersions=3 diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index bb95811acc12..b24063a5ac3b 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -38,6 +38,7 @@ import java.util.function.Consumer; import java.util.stream.Stream; import org.apache.arrow.memory.BufferAllocator; +import org.apache.arrow.util.Preconditions; import org.apache.iceberg.Files; import org.apache.iceberg.Schema; import org.apache.iceberg.arrow.ArrowAllocation; @@ -531,13 +532,11 @@ public void testGoldenFiles( throws Exception { Path goldenResourcePath = Paths.get("encodings", encoding, typeName + ".parquet"); URL goldenFileUrl = getClass().getClassLoader().getResource(goldenResourcePath.toString()); - assumeThat(goldenFileUrl).isNotNull().as("type/encoding pair exists"); + assumeThat(goldenFileUrl).as("type/encoding pair exists").isNotNull(); Path plainResourcePath = Paths.get("encodings", PLAIN, typeName + ".parquet"); URL plainFileUrl = getClass().getClassLoader().getResource(plainResourcePath.toString()); - if (plainFileUrl == null) { - throw new IllegalStateException("PLAIN encoded file should exist: " + plainResourcePath); - } + Preconditions.checkState(plainFileUrl != null, "PLAIN encoded file should exist: " + plainResourcePath); Schema expectedSchema = new Schema(optional(1, "data", primitiveType)); assertIdenticalFileContents( diff --git a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 8baf8d4eab07..80bbc269d051 100644 --- a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -38,6 +38,7 @@ import java.util.function.Consumer; import java.util.stream.Stream; import org.apache.arrow.memory.BufferAllocator; +import org.apache.arrow.util.Preconditions; import org.apache.iceberg.Files; import org.apache.iceberg.Schema; import org.apache.iceberg.arrow.ArrowAllocation; @@ -517,13 +518,11 @@ public void testGoldenFiles( throws Exception { Path goldenResourcePath = Paths.get("encodings", encoding, typeName + ".parquet"); URL goldenFileUrl = getClass().getClassLoader().getResource(goldenResourcePath.toString()); - assumeThat(goldenFileUrl).isNotNull().as("type/encoding pair exists"); + assumeThat(goldenFileUrl).as("type/encoding pair exists").isNotNull(); Path plainResourcePath = Paths.get("encodings", PLAIN, typeName + ".parquet"); URL plainFileUrl = getClass().getClassLoader().getResource(plainResourcePath.toString()); - if (plainFileUrl == null) { - throw new IllegalStateException("PLAIN encoded file should exist: " + plainResourcePath); - } + Preconditions.checkState(plainFileUrl != null, "PLAIN encoded file should exist: " + plainResourcePath); Schema expectedSchema = new Schema(optional(1, "data", primitiveType)); assertIdenticalFileContents( From edc6127a7f3ad6d6a0ee9841739660909953c7b3 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Wed, 17 Sep 2025 00:04:58 -0700 Subject: [PATCH 25/27] disable 3.5 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index dacc624a6208..5da56c59de41 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ jmhJsonOutputPath=build/reports/jmh/results.json jmhIncludeRegex=.* systemProp.defaultFlinkVersions=2.0 systemProp.knownFlinkVersions=1.19,1.20,2.0 -systemProp.defaultSparkVersions=4.0,3.5 +systemProp.defaultSparkVersions=4.0 systemProp.knownSparkVersions=3.4,3.5,4.0 systemProp.defaultKafkaVersions=3 systemProp.knownKafkaVersions=3 From 74ebd99057c79abe68e2e76a8f1a8120d15bc7ce Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Wed, 17 Sep 2025 00:34:50 -0700 Subject: [PATCH 26/27] spotless --- .../data/vectorized/parquet/TestParquetVectorizedReads.java | 3 ++- .../data/vectorized/parquet/TestParquetVectorizedReads.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index b24063a5ac3b..b6b12c6afc75 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -536,7 +536,8 @@ public void testGoldenFiles( Path plainResourcePath = Paths.get("encodings", PLAIN, typeName + ".parquet"); URL plainFileUrl = getClass().getClassLoader().getResource(plainResourcePath.toString()); - Preconditions.checkState(plainFileUrl != null, "PLAIN encoded file should exist: " + plainResourcePath); + Preconditions.checkState( + plainFileUrl != null, "PLAIN encoded file should exist: " + plainResourcePath); Schema expectedSchema = new Schema(optional(1, "data", primitiveType)); assertIdenticalFileContents( diff --git a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 80bbc269d051..16b603f694ac 100644 --- a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -522,7 +522,8 @@ public void testGoldenFiles( Path plainResourcePath = Paths.get("encodings", PLAIN, typeName + ".parquet"); URL plainFileUrl = getClass().getClassLoader().getResource(plainResourcePath.toString()); - Preconditions.checkState(plainFileUrl != null, "PLAIN encoded file should exist: " + plainResourcePath); + Preconditions.checkState( + plainFileUrl != null, "PLAIN encoded file should exist: " + plainResourcePath); Schema expectedSchema = new Schema(optional(1, "data", primitiveType)); assertIdenticalFileContents( From 8fddb249fc6b00d14fce5a7f2f6ef70c60c33d75 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Wed, 17 Sep 2025 01:04:23 -0700 Subject: [PATCH 27/27] s/Preconditions/Preconditions/ --- .../data/vectorized/parquet/TestParquetVectorizedReads.java | 2 +- .../data/vectorized/parquet/TestParquetVectorizedReads.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index b6b12c6afc75..e664db554bc0 100644 --- a/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v3.5/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -38,7 +38,6 @@ import java.util.function.Consumer; import java.util.stream.Stream; import org.apache.arrow.memory.BufferAllocator; -import org.apache.arrow.util.Preconditions; import org.apache.iceberg.Files; import org.apache.iceberg.Schema; import org.apache.iceberg.arrow.ArrowAllocation; @@ -50,6 +49,7 @@ import org.apache.iceberg.io.FileAppender; import org.apache.iceberg.parquet.Parquet; import org.apache.iceberg.relocated.com.google.common.base.Function; +import org.apache.iceberg.relocated.com.google.common.base.Preconditions; import org.apache.iceberg.relocated.com.google.common.base.Strings; import org.apache.iceberg.relocated.com.google.common.collect.ImmutableList; import org.apache.iceberg.relocated.com.google.common.collect.ImmutableMap; diff --git a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java index 16b603f694ac..2e46088cfe6d 100644 --- a/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java +++ b/spark/v4.0/spark/src/test/java/org/apache/iceberg/spark/data/vectorized/parquet/TestParquetVectorizedReads.java @@ -38,7 +38,6 @@ import java.util.function.Consumer; import java.util.stream.Stream; import org.apache.arrow.memory.BufferAllocator; -import org.apache.arrow.util.Preconditions; import org.apache.iceberg.Files; import org.apache.iceberg.Schema; import org.apache.iceberg.arrow.ArrowAllocation; @@ -50,6 +49,7 @@ import org.apache.iceberg.io.FileAppender; import org.apache.iceberg.parquet.Parquet; import org.apache.iceberg.relocated.com.google.common.base.Function; +import org.apache.iceberg.relocated.com.google.common.base.Preconditions; import org.apache.iceberg.relocated.com.google.common.base.Strings; import org.apache.iceberg.relocated.com.google.common.collect.ImmutableList; import org.apache.iceberg.relocated.com.google.common.collect.ImmutableMap;