From a77d95b0288e92f353c5240ec4a6cb83c7f3c464 Mon Sep 17 00:00:00 2001 From: Kousuke Saruta Date: Fri, 16 Apr 2021 15:05:29 +0900 Subject: [PATCH] Fix a wrong indentation issue. --- .../sql/catalyst/json/JacksonGenerator.scala | 3 ++- .../datasources/json/JsonSuite.scala | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/json/JacksonGenerator.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/json/JacksonGenerator.scala index fb0ca323af1ff..d70fceb0c38b1 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/json/JacksonGenerator.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/json/JacksonGenerator.scala @@ -20,6 +20,7 @@ package org.apache.spark.sql.catalyst.json import java.io.Writer import com.fasterxml.jackson.core._ +import com.fasterxml.jackson.core.util.DefaultPrettyPrinter import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.SpecializedGetters @@ -73,7 +74,7 @@ private[sql] class JacksonGenerator( private val gen = { val generator = new JsonFactory().createGenerator(writer).setRootValueSeparator(null) - if (options.pretty) generator.useDefaultPrettyPrinter() else generator + if (options.pretty) generator.setPrettyPrinter(new DefaultPrettyPrinter("")) else generator } private val lineSeparator: String = options.lineSeparatorInWrite diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/json/JsonSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/json/JsonSuite.scala index 434352935e13b..870701151e347 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/json/JsonSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/json/JsonSuite.scala @@ -2844,6 +2844,31 @@ abstract class JsonSuite assert(readback.collect sameElements Array(Row(0), Row(1), Row(2))) } } + + test("SPARK-35104: Fix wrong indentation for multiple JSON even if `pretty` option is true") { + withSQLConf(SQLConf.LEAF_NODE_DEFAULT_PARALLELISM.key -> "1") { + withTempPath { path => + val basePath = path.getCanonicalPath + val df = Seq("a", "b", "c").toDF + df.write.option("pretty", "true").json(basePath) + + val expectedText = + s"""{ + | "value" : "a" + |} + |{ + | "value" : "b" + |} + |{ + | "value" : "c" + |} + |""".stripMargin + val actualText = spark.read.option("wholetext", "true") + .text(basePath).map(_.getString(0)).collect().mkString + assert(actualText === expectedText) + } + } + } } class JsonV1Suite extends JsonSuite {