From bdbba44b6f1026472a9bf0a3d79b8716e54573f3 Mon Sep 17 00:00:00 2001 From: Chao Sun Date: Sun, 12 Sep 2021 00:31:39 -0700 Subject: [PATCH 1/6] initial commit --- pom.xml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 81a0126539b1d..01b3aab1560aa 100644 --- a/pom.xml +++ b/pom.xml @@ -136,7 +136,7 @@ 2.8.0 10.14.2.0 - 1.12.0 + 1.12.1 1.6.10 9.4.43.v20210629 4.0.3 @@ -306,6 +306,17 @@ Jitpack.io repository + + staged + parquet-staged-releases + https://repository.apache.org/content/repositories/staging/ + + true + + + true + + From 96a7269a9672ca28c8d12fab9b5ba28a4fa078ae Mon Sep 17 00:00:00 2001 From: Chao Sun Date: Sun, 12 Sep 2021 09:23:54 -0700 Subject: [PATCH 2/6] fix additional build --- project/SparkBuild.scala | 1 + .../src/main/scala/org/apache/spark/sql/internal/SQLConf.scala | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/project/SparkBuild.scala b/project/SparkBuild.scala index 2f82b1ce9c18f..e3e4f3a494cbe 100644 --- a/project/SparkBuild.scala +++ b/project/SparkBuild.scala @@ -272,6 +272,7 @@ object SparkBuild extends PomBuild { // Google Mirror of Maven Central, placed first so that it's used instead of flaky Maven Central. // See https://storage-download.googleapis.com/maven-central/index.html for more info. "gcs-maven-central-mirror" at "https://maven-central.storage-download.googleapis.com/maven2/", + "parquet-staged-release-mirror" at "https://repository.apache.org/content/repositories/staging/", DefaultMavenRepository, Resolver.mavenLocal, Resolver.file("ivyLocal", file(Path.userHome.absolutePath + "/.ivy2/local"))(Resolver.ivyStylePatterns), diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala index 8ba2b9f8fd2a8..061e5aa6db69a 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala @@ -3048,7 +3048,8 @@ object SQLConf { .stringConf .createWithDefault( sys.env.getOrElse("DEFAULT_ARTIFACT_REPOSITORY", - "https://maven-central.storage-download.googleapis.com/maven2/")) + "https://maven-central.storage-download.googleapis.com/maven2/," + + "https://repository.apache.org/content/repositories/staging/")) val LEGACY_FROM_DAYTIME_STRING = buildConf("spark.sql.legacy.fromDayTimeString.enabled") From de50e4bdbf9999b88dff6292725413b74befb003 Mon Sep 17 00:00:00 2001 From: Chao Sun Date: Mon, 13 Sep 2021 13:26:57 -0700 Subject: [PATCH 3/6] address comments --- dev/deps/spark-deps-hadoop-2.7-hive-2.3 | 12 ++++++------ dev/deps/spark-deps-hadoop-3.2-hive-2.3 | 12 ++++++------ .../test-data/malformed-file-offset.parquet | Bin 0 -> 37968 bytes .../datasources/parquet/ParquetIOSuite.scala | 6 ++++++ 4 files changed, 18 insertions(+), 12 deletions(-) create mode 100644 sql/core/src/test/resources/test-data/malformed-file-offset.parquet diff --git a/dev/deps/spark-deps-hadoop-2.7-hive-2.3 b/dev/deps/spark-deps-hadoop-2.7-hive-2.3 index da5c506f0f041..9db3b5a158c3a 100644 --- a/dev/deps/spark-deps-hadoop-2.7-hive-2.3 +++ b/dev/deps/spark-deps-hadoop-2.7-hive-2.3 @@ -201,12 +201,12 @@ orc-shims/1.6.10//orc-shims-1.6.10.jar oro/2.0.8//oro-2.0.8.jar osgi-resource-locator/1.0.3//osgi-resource-locator-1.0.3.jar paranamer/2.8//paranamer-2.8.jar -parquet-column/1.12.0//parquet-column-1.12.0.jar -parquet-common/1.12.0//parquet-common-1.12.0.jar -parquet-encoding/1.12.0//parquet-encoding-1.12.0.jar -parquet-format-structures/1.12.0//parquet-format-structures-1.12.0.jar -parquet-hadoop/1.12.0//parquet-hadoop-1.12.0.jar -parquet-jackson/1.12.0//parquet-jackson-1.12.0.jar +parquet-column/1.12.1//parquet-column-1.12.1.jar +parquet-common/1.12.1//parquet-common-1.12.1.jar +parquet-encoding/1.12.1//parquet-encoding-1.12.1.jar +parquet-format-structures/1.12.1//parquet-format-structures-1.12.1.jar +parquet-hadoop/1.12.1//parquet-hadoop-1.12.1.jar +parquet-jackson/1.12.1//parquet-jackson-1.12.1.jar protobuf-java/2.5.0//protobuf-java-2.5.0.jar py4j/0.10.9.2//py4j-0.10.9.2.jar pyrolite/4.30//pyrolite-4.30.jar diff --git a/dev/deps/spark-deps-hadoop-3.2-hive-2.3 b/dev/deps/spark-deps-hadoop-3.2-hive-2.3 index 8aa8fe49994cd..d20f6339e8a15 100644 --- a/dev/deps/spark-deps-hadoop-3.2-hive-2.3 +++ b/dev/deps/spark-deps-hadoop-3.2-hive-2.3 @@ -172,12 +172,12 @@ orc-shims/1.6.10//orc-shims-1.6.10.jar oro/2.0.8//oro-2.0.8.jar osgi-resource-locator/1.0.3//osgi-resource-locator-1.0.3.jar paranamer/2.8//paranamer-2.8.jar -parquet-column/1.12.0//parquet-column-1.12.0.jar -parquet-common/1.12.0//parquet-common-1.12.0.jar -parquet-encoding/1.12.0//parquet-encoding-1.12.0.jar -parquet-format-structures/1.12.0//parquet-format-structures-1.12.0.jar -parquet-hadoop/1.12.0//parquet-hadoop-1.12.0.jar -parquet-jackson/1.12.0//parquet-jackson-1.12.0.jar +parquet-column/1.12.1//parquet-column-1.12.1.jar +parquet-common/1.12.1//parquet-common-1.12.1.jar +parquet-encoding/1.12.1//parquet-encoding-1.12.1.jar +parquet-format-structures/1.12.1//parquet-format-structures-1.12.1.jar +parquet-hadoop/1.12.1//parquet-hadoop-1.12.1.jar +parquet-jackson/1.12.1//parquet-jackson-1.12.1.jar protobuf-java/2.5.0//protobuf-java-2.5.0.jar py4j/0.10.9.2//py4j-0.10.9.2.jar pyrolite/4.30//pyrolite-4.30.jar diff --git a/sql/core/src/test/resources/test-data/malformed-file-offset.parquet b/sql/core/src/test/resources/test-data/malformed-file-offset.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5abeabea42ba9a2a42e204ac73c8f861307fb5e8 GIT binary patch literal 37968 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 literal 0 HcmV?d00001 diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetIOSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetIOSuite.scala index a330b82de2d0c..b5eb5fe165d06 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetIOSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetIOSuite.scala @@ -855,6 +855,12 @@ class ParquetIOSuite extends QueryTest with ParquetTest with SharedSparkSession } } + test("SPARK-36726: test incorrect Parquet row group file offset") { + readParquetFile("test-data/malformed-file-offset.parquet") { df => + assert(df.count() == 3650) + } + } + test("VectorizedParquetRecordReader - direct path read") { val data = (0 to 10).map(i => (i, (i + 'a').toChar.toString)) withTempPath { dir => From 7888295ea0e02ab643ef1fdfb24b7b9984376236 Mon Sep 17 00:00:00 2001 From: Chao Sun Date: Mon, 13 Sep 2021 17:21:01 -0700 Subject: [PATCH 4/6] use readFile --- .../sql/execution/datasources/parquet/ParquetIOSuite.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetIOSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetIOSuite.scala index b5eb5fe165d06..e03a50b69ae5f 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetIOSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetIOSuite.scala @@ -856,7 +856,7 @@ class ParquetIOSuite extends QueryTest with ParquetTest with SharedSparkSession } test("SPARK-36726: test incorrect Parquet row group file offset") { - readParquetFile("test-data/malformed-file-offset.parquet") { df => + readParquetFile(testFile("test-data/malformed-file-offset.parquet")) { df => assert(df.count() == 3650) } } From ba93e35023a0cbfa080c3035085a970a535d8858 Mon Sep 17 00:00:00 2001 From: Chao Sun Date: Tue, 14 Sep 2021 11:40:04 -0700 Subject: [PATCH 5/6] retrigger build From 0097af67f5e3b4e865a76b947568445641289a3c Mon Sep 17 00:00:00 2001 From: Chao Sun Date: Wed, 15 Sep 2021 09:06:33 -0700 Subject: [PATCH 6/6] remove staging config --- pom.xml | 11 ----------- project/SparkBuild.scala | 1 - .../scala/org/apache/spark/sql/internal/SQLConf.scala | 3 +-- 3 files changed, 1 insertion(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index 01b3aab1560aa..989a230f2c856 100644 --- a/pom.xml +++ b/pom.xml @@ -306,17 +306,6 @@ Jitpack.io repository - - staged - parquet-staged-releases - https://repository.apache.org/content/repositories/staging/ - - true - - - true - - diff --git a/project/SparkBuild.scala b/project/SparkBuild.scala index e3e4f3a494cbe..2f82b1ce9c18f 100644 --- a/project/SparkBuild.scala +++ b/project/SparkBuild.scala @@ -272,7 +272,6 @@ object SparkBuild extends PomBuild { // Google Mirror of Maven Central, placed first so that it's used instead of flaky Maven Central. // See https://storage-download.googleapis.com/maven-central/index.html for more info. "gcs-maven-central-mirror" at "https://maven-central.storage-download.googleapis.com/maven2/", - "parquet-staged-release-mirror" at "https://repository.apache.org/content/repositories/staging/", DefaultMavenRepository, Resolver.mavenLocal, Resolver.file("ivyLocal", file(Path.userHome.absolutePath + "/.ivy2/local"))(Resolver.ivyStylePatterns), diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala index 061e5aa6db69a..8ba2b9f8fd2a8 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala @@ -3048,8 +3048,7 @@ object SQLConf { .stringConf .createWithDefault( sys.env.getOrElse("DEFAULT_ARTIFACT_REPOSITORY", - "https://maven-central.storage-download.googleapis.com/maven2/," + - "https://repository.apache.org/content/repositories/staging/")) + "https://maven-central.storage-download.googleapis.com/maven2/")) val LEGACY_FROM_DAYTIME_STRING = buildConf("spark.sql.legacy.fromDayTimeString.enabled")