aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCheng Lian <lian@databricks.com>2015-08-20 11:00:24 -0700
committerMichael Armbrust <michael@databricks.com>2015-08-20 11:02:02 -0700
commit2f47e099d31275f03ad372483e1bb23a322044f5 (patch)
treed86c71ffde4e6b4ac9cbd83dfcb7a3b6d77c16d3
parenta7027e6d3369a1157c53557c8215273606086d84 (diff)
downloadspark-2f47e099d31275f03ad372483e1bb23a322044f5.tar.gz
spark-2f47e099d31275f03ad372483e1bb23a322044f5.tar.bz2
spark-2f47e099d31275f03ad372483e1bb23a322044f5.zip
[SPARK-10136] [SQL] Fixes Parquet support for Avro array of primitive array
I caught SPARK-10136 while adding more test cases to `ParquetAvroCompatibilitySuite`. Actual bug fix code lies in `CatalystRowConverter.scala`. Author: Cheng Lian <lian@databricks.com> Closes #8341 from liancheng/spark-10136/parquet-avro-nested-primitive-array. (cherry picked from commit 85f9a61357994da5023b08b0a8a2eb09388ce7f8) Signed-off-by: Michael Armbrust <michael@databricks.com>
-rw-r--r--sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/CatalystReadSupport.scala1
-rw-r--r--sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/CatalystRowConverter.scala24
-rw-r--r--sql/core/src/test/avro/parquet-compat.avdl19
-rw-r--r--sql/core/src/test/avro/parquet-compat.avpr54
-rw-r--r--sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroArrayOfArray.java142
-rw-r--r--sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroMapOfArray.java142
-rw-r--r--sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroNonNullableArrays.java196
-rw-r--r--sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroOptionalPrimitives.java466
-rw-r--r--sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroPrimitives.java461
-rw-r--r--sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/CompatibilityTest.java2
-rw-r--r--sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/ParquetAvroCompat.java821
-rw-r--r--sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetAvroCompatibilitySuite.scala227
-rw-r--r--sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetCompatibilityTest.scala7
13 files changed, 1718 insertions, 844 deletions
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/CatalystReadSupport.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/CatalystReadSupport.scala
index a4679bb2f6..3f8353af6e 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/CatalystReadSupport.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/CatalystReadSupport.scala
@@ -61,7 +61,6 @@ private[parquet] class CatalystReadSupport extends ReadSupport[InternalRow] with
|
|Parquet form:
|$parquetRequestedSchema
- |
|Catalyst form:
|$catalystRequestedSchema
""".stripMargin
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/CatalystRowConverter.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/CatalystRowConverter.scala
index 18c5b50020..d2c2db5176 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/CatalystRowConverter.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/CatalystRowConverter.scala
@@ -25,11 +25,12 @@ import scala.collection.mutable.ArrayBuffer
import org.apache.parquet.column.Dictionary
import org.apache.parquet.io.api.{Binary, Converter, GroupConverter, PrimitiveConverter}
-import org.apache.parquet.schema.OriginalType.{LIST, INT_32, UTF8}
+import org.apache.parquet.schema.OriginalType.{INT_32, LIST, UTF8}
import org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.DOUBLE
import org.apache.parquet.schema.Type.Repetition
import org.apache.parquet.schema.{GroupType, MessageType, PrimitiveType, Type}
+import org.apache.spark.Logging
import org.apache.spark.sql.catalyst.InternalRow
import org.apache.spark.sql.catalyst.expressions._
import org.apache.spark.sql.catalyst.util.DateTimeUtils
@@ -145,7 +146,16 @@ private[parquet] class CatalystRowConverter(
parquetType: GroupType,
catalystType: StructType,
updater: ParentContainerUpdater)
- extends CatalystGroupConverter(updater) {
+ extends CatalystGroupConverter(updater) with Logging {
+
+ logDebug(
+ s"""Building row converter for the following schema:
+ |
+ |Parquet form:
+ |$parquetType
+ |Catalyst form:
+ |${catalystType.prettyJson}
+ """.stripMargin)
/**
* Updater used together with field converters within a [[CatalystRowConverter]]. It propagates
@@ -464,9 +474,15 @@ private[parquet] class CatalystRowConverter(
override def getConverter(fieldIndex: Int): Converter = converter
- override def end(): Unit = currentArray += currentElement
+ override def end(): Unit = {
+ converter.updater.end()
+ currentArray += currentElement
+ }
- override def start(): Unit = currentElement = null
+ override def start(): Unit = {
+ converter.updater.start()
+ currentElement = null
+ }
}
}
diff --git a/sql/core/src/test/avro/parquet-compat.avdl b/sql/core/src/test/avro/parquet-compat.avdl
index 8070d0a917..c5eb5b5164 100644
--- a/sql/core/src/test/avro/parquet-compat.avdl
+++ b/sql/core/src/test/avro/parquet-compat.avdl
@@ -34,7 +34,7 @@ protocol CompatibilityTest {
string nested_string_column;
}
- record ParquetAvroCompat {
+ record AvroPrimitives {
boolean bool_column;
int int_column;
long long_column;
@@ -42,7 +42,9 @@ protocol CompatibilityTest {
double double_column;
bytes binary_column;
string string_column;
+ }
+ record AvroOptionalPrimitives {
union { null, boolean } maybe_bool_column;
union { null, int } maybe_int_column;
union { null, long } maybe_long_column;
@@ -50,7 +52,22 @@ protocol CompatibilityTest {
union { null, double } maybe_double_column;
union { null, bytes } maybe_binary_column;
union { null, string } maybe_string_column;
+ }
+
+ record AvroNonNullableArrays {
+ array<string> strings_column;
+ union { null, array<int> } maybe_ints_column;
+ }
+ record AvroArrayOfArray {
+ array<array<int>> int_arrays_column;
+ }
+
+ record AvroMapOfArray {
+ map<array<int>> string_to_ints_column;
+ }
+
+ record ParquetAvroCompat {
array<string> strings_column;
map<int> string_to_int_column;
map<array<Nested>> complex_column;
diff --git a/sql/core/src/test/avro/parquet-compat.avpr b/sql/core/src/test/avro/parquet-compat.avpr
index 0603917650..9ad315b74f 100644
--- a/sql/core/src/test/avro/parquet-compat.avpr
+++ b/sql/core/src/test/avro/parquet-compat.avpr
@@ -27,7 +27,7 @@
} ]
}, {
"type" : "record",
- "name" : "ParquetAvroCompat",
+ "name" : "AvroPrimitives",
"fields" : [ {
"name" : "bool_column",
"type" : "boolean"
@@ -49,7 +49,11 @@
}, {
"name" : "string_column",
"type" : "string"
- }, {
+ } ]
+ }, {
+ "type" : "record",
+ "name" : "AvroOptionalPrimitives",
+ "fields" : [ {
"name" : "maybe_bool_column",
"type" : [ "null", "boolean" ]
}, {
@@ -70,7 +74,53 @@
}, {
"name" : "maybe_string_column",
"type" : [ "null", "string" ]
+ } ]
+ }, {
+ "type" : "record",
+ "name" : "AvroNonNullableArrays",
+ "fields" : [ {
+ "name" : "strings_column",
+ "type" : {
+ "type" : "array",
+ "items" : "string"
+ }
}, {
+ "name" : "maybe_ints_column",
+ "type" : [ "null", {
+ "type" : "array",
+ "items" : "int"
+ } ]
+ } ]
+ }, {
+ "type" : "record",
+ "name" : "AvroArrayOfArray",
+ "fields" : [ {
+ "name" : "int_arrays_column",
+ "type" : {
+ "type" : "array",
+ "items" : {
+ "type" : "array",
+ "items" : "int"
+ }
+ }
+ } ]
+ }, {
+ "type" : "record",
+ "name" : "AvroMapOfArray",
+ "fields" : [ {
+ "name" : "string_to_ints_column",
+ "type" : {
+ "type" : "map",
+ "values" : {
+ "type" : "array",
+ "items" : "int"
+ }
+ }
+ } ]
+ }, {
+ "type" : "record",
+ "name" : "ParquetAvroCompat",
+ "fields" : [ {
"name" : "strings_column",
"type" : {
"type" : "array",
diff --git a/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroArrayOfArray.java b/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroArrayOfArray.java
new file mode 100644
index 0000000000..ee32782790
--- /dev/null
+++ b/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroArrayOfArray.java
@@ -0,0 +1,142 @@
+/**
+ * Autogenerated by Avro
+ *
+ * DO NOT EDIT DIRECTLY
+ */
+package org.apache.spark.sql.execution.datasources.parquet.test.avro;
+@SuppressWarnings("all")
+@org.apache.avro.specific.AvroGenerated
+public class AvroArrayOfArray extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {
+ public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"AvroArrayOfArray\",\"namespace\":\"org.apache.spark.sql.execution.datasources.parquet.test.avro\",\"fields\":[{\"name\":\"int_arrays_column\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"array\",\"items\":\"int\"}}}]}");
+ public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }
+ @Deprecated public java.util.List<java.util.List<java.lang.Integer>> int_arrays_column;
+
+ /**
+ * Default constructor. Note that this does not initialize fields
+ * to their default values from the schema. If that is desired then
+ * one should use <code>newBuilder()</code>.
+ */
+ public AvroArrayOfArray() {}
+
+ /**
+ * All-args constructor.
+ */
+ public AvroArrayOfArray(java.util.List<java.util.List<java.lang.Integer>> int_arrays_column) {
+ this.int_arrays_column = int_arrays_column;
+ }
+
+ public org.apache.avro.Schema getSchema() { return SCHEMA$; }
+ // Used by DatumWriter. Applications should not call.
+ public java.lang.Object get(int field$) {
+ switch (field$) {
+ case 0: return int_arrays_column;
+ default: throw new org.apache.avro.AvroRuntimeException("Bad index");
+ }
+ }
+ // Used by DatumReader. Applications should not call.
+ @SuppressWarnings(value="unchecked")
+ public void put(int field$, java.lang.Object value$) {
+ switch (field$) {
+ case 0: int_arrays_column = (java.util.List<java.util.List<java.lang.Integer>>)value$; break;
+ default: throw new org.apache.avro.AvroRuntimeException("Bad index");
+ }
+ }
+
+ /**
+ * Gets the value of the 'int_arrays_column' field.
+ */
+ public java.util.List<java.util.List<java.lang.Integer>> getIntArraysColumn() {
+ return int_arrays_column;
+ }
+
+ /**
+ * Sets the value of the 'int_arrays_column' field.
+ * @param value the value to set.
+ */
+ public void setIntArraysColumn(java.util.List<java.util.List<java.lang.Integer>> value) {
+ this.int_arrays_column = value;
+ }
+
+ /** Creates a new AvroArrayOfArray RecordBuilder */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroArrayOfArray.Builder newBuilder() {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroArrayOfArray.Builder();
+ }
+
+ /** Creates a new AvroArrayOfArray RecordBuilder by copying an existing Builder */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroArrayOfArray.Builder newBuilder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroArrayOfArray.Builder other) {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroArrayOfArray.Builder(other);
+ }
+
+ /** Creates a new AvroArrayOfArray RecordBuilder by copying an existing AvroArrayOfArray instance */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroArrayOfArray.Builder newBuilder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroArrayOfArray other) {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroArrayOfArray.Builder(other);
+ }
+
+ /**
+ * RecordBuilder for AvroArrayOfArray instances.
+ */
+ public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase<AvroArrayOfArray>
+ implements org.apache.avro.data.RecordBuilder<AvroArrayOfArray> {
+
+ private java.util.List<java.util.List<java.lang.Integer>> int_arrays_column;
+
+ /** Creates a new Builder */
+ private Builder() {
+ super(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroArrayOfArray.SCHEMA$);
+ }
+
+ /** Creates a Builder by copying an existing Builder */
+ private Builder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroArrayOfArray.Builder other) {
+ super(other);
+ if (isValidValue(fields()[0], other.int_arrays_column)) {
+ this.int_arrays_column = data().deepCopy(fields()[0].schema(), other.int_arrays_column);
+ fieldSetFlags()[0] = true;
+ }
+ }
+
+ /** Creates a Builder by copying an existing AvroArrayOfArray instance */
+ private Builder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroArrayOfArray other) {
+ super(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroArrayOfArray.SCHEMA$);
+ if (isValidValue(fields()[0], other.int_arrays_column)) {
+ this.int_arrays_column = data().deepCopy(fields()[0].schema(), other.int_arrays_column);
+ fieldSetFlags()[0] = true;
+ }
+ }
+
+ /** Gets the value of the 'int_arrays_column' field */
+ public java.util.List<java.util.List<java.lang.Integer>> getIntArraysColumn() {
+ return int_arrays_column;
+ }
+
+ /** Sets the value of the 'int_arrays_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroArrayOfArray.Builder setIntArraysColumn(java.util.List<java.util.List<java.lang.Integer>> value) {
+ validate(fields()[0], value);
+ this.int_arrays_column = value;
+ fieldSetFlags()[0] = true;
+ return this;
+ }
+
+ /** Checks whether the 'int_arrays_column' field has been set */
+ public boolean hasIntArraysColumn() {
+ return fieldSetFlags()[0];
+ }
+
+ /** Clears the value of the 'int_arrays_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroArrayOfArray.Builder clearIntArraysColumn() {
+ int_arrays_column = null;
+ fieldSetFlags()[0] = false;
+ return this;
+ }
+
+ @Override
+ public AvroArrayOfArray build() {
+ try {
+ AvroArrayOfArray record = new AvroArrayOfArray();
+ record.int_arrays_column = fieldSetFlags()[0] ? this.int_arrays_column : (java.util.List<java.util.List<java.lang.Integer>>) defaultValue(fields()[0]);
+ return record;
+ } catch (Exception e) {
+ throw new org.apache.avro.AvroRuntimeException(e);
+ }
+ }
+ }
+}
diff --git a/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroMapOfArray.java b/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroMapOfArray.java
new file mode 100644
index 0000000000..727f6a7bf7
--- /dev/null
+++ b/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroMapOfArray.java
@@ -0,0 +1,142 @@
+/**
+ * Autogenerated by Avro
+ *
+ * DO NOT EDIT DIRECTLY
+ */
+package org.apache.spark.sql.execution.datasources.parquet.test.avro;
+@SuppressWarnings("all")
+@org.apache.avro.specific.AvroGenerated
+public class AvroMapOfArray extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {
+ public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"AvroMapOfArray\",\"namespace\":\"org.apache.spark.sql.execution.datasources.parquet.test.avro\",\"fields\":[{\"name\":\"string_to_ints_column\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"array\",\"items\":\"int\"},\"avro.java.string\":\"String\"}}]}");
+ public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }
+ @Deprecated public java.util.Map<java.lang.String,java.util.List<java.lang.Integer>> string_to_ints_column;
+
+ /**
+ * Default constructor. Note that this does not initialize fields
+ * to their default values from the schema. If that is desired then
+ * one should use <code>newBuilder()</code>.
+ */
+ public AvroMapOfArray() {}
+
+ /**
+ * All-args constructor.
+ */
+ public AvroMapOfArray(java.util.Map<java.lang.String,java.util.List<java.lang.Integer>> string_to_ints_column) {
+ this.string_to_ints_column = string_to_ints_column;
+ }
+
+ public org.apache.avro.Schema getSchema() { return SCHEMA$; }
+ // Used by DatumWriter. Applications should not call.
+ public java.lang.Object get(int field$) {
+ switch (field$) {
+ case 0: return string_to_ints_column;
+ default: throw new org.apache.avro.AvroRuntimeException("Bad index");
+ }
+ }
+ // Used by DatumReader. Applications should not call.
+ @SuppressWarnings(value="unchecked")
+ public void put(int field$, java.lang.Object value$) {
+ switch (field$) {
+ case 0: string_to_ints_column = (java.util.Map<java.lang.String,java.util.List<java.lang.Integer>>)value$; break;
+ default: throw new org.apache.avro.AvroRuntimeException("Bad index");
+ }
+ }
+
+ /**
+ * Gets the value of the 'string_to_ints_column' field.
+ */
+ public java.util.Map<java.lang.String,java.util.List<java.lang.Integer>> getStringToIntsColumn() {
+ return string_to_ints_column;
+ }
+
+ /**
+ * Sets the value of the 'string_to_ints_column' field.
+ * @param value the value to set.
+ */
+ public void setStringToIntsColumn(java.util.Map<java.lang.String,java.util.List<java.lang.Integer>> value) {
+ this.string_to_ints_column = value;
+ }
+
+ /** Creates a new AvroMapOfArray RecordBuilder */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroMapOfArray.Builder newBuilder() {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroMapOfArray.Builder();
+ }
+
+ /** Creates a new AvroMapOfArray RecordBuilder by copying an existing Builder */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroMapOfArray.Builder newBuilder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroMapOfArray.Builder other) {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroMapOfArray.Builder(other);
+ }
+
+ /** Creates a new AvroMapOfArray RecordBuilder by copying an existing AvroMapOfArray instance */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroMapOfArray.Builder newBuilder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroMapOfArray other) {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroMapOfArray.Builder(other);
+ }
+
+ /**
+ * RecordBuilder for AvroMapOfArray instances.
+ */
+ public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase<AvroMapOfArray>
+ implements org.apache.avro.data.RecordBuilder<AvroMapOfArray> {
+
+ private java.util.Map<java.lang.String,java.util.List<java.lang.Integer>> string_to_ints_column;
+
+ /** Creates a new Builder */
+ private Builder() {
+ super(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroMapOfArray.SCHEMA$);
+ }
+
+ /** Creates a Builder by copying an existing Builder */
+ private Builder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroMapOfArray.Builder other) {
+ super(other);
+ if (isValidValue(fields()[0], other.string_to_ints_column)) {
+ this.string_to_ints_column = data().deepCopy(fields()[0].schema(), other.string_to_ints_column);
+ fieldSetFlags()[0] = true;
+ }
+ }
+
+ /** Creates a Builder by copying an existing AvroMapOfArray instance */
+ private Builder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroMapOfArray other) {
+ super(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroMapOfArray.SCHEMA$);
+ if (isValidValue(fields()[0], other.string_to_ints_column)) {
+ this.string_to_ints_column = data().deepCopy(fields()[0].schema(), other.string_to_ints_column);
+ fieldSetFlags()[0] = true;
+ }
+ }
+
+ /** Gets the value of the 'string_to_ints_column' field */
+ public java.util.Map<java.lang.String,java.util.List<java.lang.Integer>> getStringToIntsColumn() {
+ return string_to_ints_column;
+ }
+
+ /** Sets the value of the 'string_to_ints_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroMapOfArray.Builder setStringToIntsColumn(java.util.Map<java.lang.String,java.util.List<java.lang.Integer>> value) {
+ validate(fields()[0], value);
+ this.string_to_ints_column = value;
+ fieldSetFlags()[0] = true;
+ return this;
+ }
+
+ /** Checks whether the 'string_to_ints_column' field has been set */
+ public boolean hasStringToIntsColumn() {
+ return fieldSetFlags()[0];
+ }
+
+ /** Clears the value of the 'string_to_ints_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroMapOfArray.Builder clearStringToIntsColumn() {
+ string_to_ints_column = null;
+ fieldSetFlags()[0] = false;
+ return this;
+ }
+
+ @Override
+ public AvroMapOfArray build() {
+ try {
+ AvroMapOfArray record = new AvroMapOfArray();
+ record.string_to_ints_column = fieldSetFlags()[0] ? this.string_to_ints_column : (java.util.Map<java.lang.String,java.util.List<java.lang.Integer>>) defaultValue(fields()[0]);
+ return record;
+ } catch (Exception e) {
+ throw new org.apache.avro.AvroRuntimeException(e);
+ }
+ }
+ }
+}
diff --git a/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroNonNullableArrays.java b/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroNonNullableArrays.java
new file mode 100644
index 0000000000..934793f42f
--- /dev/null
+++ b/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroNonNullableArrays.java
@@ -0,0 +1,196 @@
+/**
+ * Autogenerated by Avro
+ *
+ * DO NOT EDIT DIRECTLY
+ */
+package org.apache.spark.sql.execution.datasources.parquet.test.avro;
+@SuppressWarnings("all")
+@org.apache.avro.specific.AvroGenerated
+public class AvroNonNullableArrays extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {
+ public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"AvroNonNullableArrays\",\"namespace\":\"org.apache.spark.sql.execution.datasources.parquet.test.avro\",\"fields\":[{\"name\":\"strings_column\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}},{\"name\":\"maybe_ints_column\",\"type\":[\"null\",{\"type\":\"array\",\"items\":\"int\"}]}]}");
+ public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }
+ @Deprecated public java.util.List<java.lang.String> strings_column;
+ @Deprecated public java.util.List<java.lang.Integer> maybe_ints_column;
+
+ /**
+ * Default constructor. Note that this does not initialize fields
+ * to their default values from the schema. If that is desired then
+ * one should use <code>newBuilder()</code>.
+ */
+ public AvroNonNullableArrays() {}
+
+ /**
+ * All-args constructor.
+ */
+ public AvroNonNullableArrays(java.util.List<java.lang.String> strings_column, java.util.List<java.lang.Integer> maybe_ints_column) {
+ this.strings_column = strings_column;
+ this.maybe_ints_column = maybe_ints_column;
+ }
+
+ public org.apache.avro.Schema getSchema() { return SCHEMA$; }
+ // Used by DatumWriter. Applications should not call.
+ public java.lang.Object get(int field$) {
+ switch (field$) {
+ case 0: return strings_column;
+ case 1: return maybe_ints_column;
+ default: throw new org.apache.avro.AvroRuntimeException("Bad index");
+ }
+ }
+ // Used by DatumReader. Applications should not call.
+ @SuppressWarnings(value="unchecked")
+ public void put(int field$, java.lang.Object value$) {
+ switch (field$) {
+ case 0: strings_column = (java.util.List<java.lang.String>)value$; break;
+ case 1: maybe_ints_column = (java.util.List<java.lang.Integer>)value$; break;
+ default: throw new org.apache.avro.AvroRuntimeException("Bad index");
+ }
+ }
+
+ /**
+ * Gets the value of the 'strings_column' field.
+ */
+ public java.util.List<java.lang.String> getStringsColumn() {
+ return strings_column;
+ }
+
+ /**
+ * Sets the value of the 'strings_column' field.
+ * @param value the value to set.
+ */
+ public void setStringsColumn(java.util.List<java.lang.String> value) {
+ this.strings_column = value;
+ }
+
+ /**
+ * Gets the value of the 'maybe_ints_column' field.
+ */
+ public java.util.List<java.lang.Integer> getMaybeIntsColumn() {
+ return maybe_ints_column;
+ }
+
+ /**
+ * Sets the value of the 'maybe_ints_column' field.
+ * @param value the value to set.
+ */
+ public void setMaybeIntsColumn(java.util.List<java.lang.Integer> value) {
+ this.maybe_ints_column = value;
+ }
+
+ /** Creates a new AvroNonNullableArrays RecordBuilder */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays.Builder newBuilder() {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays.Builder();
+ }
+
+ /** Creates a new AvroNonNullableArrays RecordBuilder by copying an existing Builder */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays.Builder newBuilder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays.Builder other) {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays.Builder(other);
+ }
+
+ /** Creates a new AvroNonNullableArrays RecordBuilder by copying an existing AvroNonNullableArrays instance */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays.Builder newBuilder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays other) {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays.Builder(other);
+ }
+
+ /**
+ * RecordBuilder for AvroNonNullableArrays instances.
+ */
+ public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase<AvroNonNullableArrays>
+ implements org.apache.avro.data.RecordBuilder<AvroNonNullableArrays> {
+
+ private java.util.List<java.lang.String> strings_column;
+ private java.util.List<java.lang.Integer> maybe_ints_column;
+
+ /** Creates a new Builder */
+ private Builder() {
+ super(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays.SCHEMA$);
+ }
+
+ /** Creates a Builder by copying an existing Builder */
+ private Builder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays.Builder other) {
+ super(other);
+ if (isValidValue(fields()[0], other.strings_column)) {
+ this.strings_column = data().deepCopy(fields()[0].schema(), other.strings_column);
+ fieldSetFlags()[0] = true;
+ }
+ if (isValidValue(fields()[1], other.maybe_ints_column)) {
+ this.maybe_ints_column = data().deepCopy(fields()[1].schema(), other.maybe_ints_column);
+ fieldSetFlags()[1] = true;
+ }
+ }
+
+ /** Creates a Builder by copying an existing AvroNonNullableArrays instance */
+ private Builder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays other) {
+ super(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays.SCHEMA$);
+ if (isValidValue(fields()[0], other.strings_column)) {
+ this.strings_column = data().deepCopy(fields()[0].schema(), other.strings_column);
+ fieldSetFlags()[0] = true;
+ }
+ if (isValidValue(fields()[1], other.maybe_ints_column)) {
+ this.maybe_ints_column = data().deepCopy(fields()[1].schema(), other.maybe_ints_column);
+ fieldSetFlags()[1] = true;
+ }
+ }
+
+ /** Gets the value of the 'strings_column' field */
+ public java.util.List<java.lang.String> getStringsColumn() {
+ return strings_column;
+ }
+
+ /** Sets the value of the 'strings_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays.Builder setStringsColumn(java.util.List<java.lang.String> value) {
+ validate(fields()[0], value);
+ this.strings_column = value;
+ fieldSetFlags()[0] = true;
+ return this;
+ }
+
+ /** Checks whether the 'strings_column' field has been set */
+ public boolean hasStringsColumn() {
+ return fieldSetFlags()[0];
+ }
+
+ /** Clears the value of the 'strings_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays.Builder clearStringsColumn() {
+ strings_column = null;
+ fieldSetFlags()[0] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'maybe_ints_column' field */
+ public java.util.List<java.lang.Integer> getMaybeIntsColumn() {
+ return maybe_ints_column;
+ }
+
+ /** Sets the value of the 'maybe_ints_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays.Builder setMaybeIntsColumn(java.util.List<java.lang.Integer> value) {
+ validate(fields()[1], value);
+ this.maybe_ints_column = value;
+ fieldSetFlags()[1] = true;
+ return this;
+ }
+
+ /** Checks whether the 'maybe_ints_column' field has been set */
+ public boolean hasMaybeIntsColumn() {
+ return fieldSetFlags()[1];
+ }
+
+ /** Clears the value of the 'maybe_ints_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroNonNullableArrays.Builder clearMaybeIntsColumn() {
+ maybe_ints_column = null;
+ fieldSetFlags()[1] = false;
+ return this;
+ }
+
+ @Override
+ public AvroNonNullableArrays build() {
+ try {
+ AvroNonNullableArrays record = new AvroNonNullableArrays();
+ record.strings_column = fieldSetFlags()[0] ? this.strings_column : (java.util.List<java.lang.String>) defaultValue(fields()[0]);
+ record.maybe_ints_column = fieldSetFlags()[1] ? this.maybe_ints_column : (java.util.List<java.lang.Integer>) defaultValue(fields()[1]);
+ return record;
+ } catch (Exception e) {
+ throw new org.apache.avro.AvroRuntimeException(e);
+ }
+ }
+ }
+}
diff --git a/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroOptionalPrimitives.java b/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroOptionalPrimitives.java
new file mode 100644
index 0000000000..e4d1ead8dd
--- /dev/null
+++ b/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroOptionalPrimitives.java
@@ -0,0 +1,466 @@
+/**
+ * Autogenerated by Avro
+ *
+ * DO NOT EDIT DIRECTLY
+ */
+package org.apache.spark.sql.execution.datasources.parquet.test.avro;
+@SuppressWarnings("all")
+@org.apache.avro.specific.AvroGenerated
+public class AvroOptionalPrimitives extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {
+ public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"AvroOptionalPrimitives\",\"namespace\":\"org.apache.spark.sql.execution.datasources.parquet.test.avro\",\"fields\":[{\"name\":\"maybe_bool_column\",\"type\":[\"null\",\"boolean\"]},{\"name\":\"maybe_int_column\",\"type\":[\"null\",\"int\"]},{\"name\":\"maybe_long_column\",\"type\":[\"null\",\"long\"]},{\"name\":\"maybe_float_column\",\"type\":[\"null\",\"float\"]},{\"name\":\"maybe_double_column\",\"type\":[\"null\",\"double\"]},{\"name\":\"maybe_binary_column\",\"type\":[\"null\",\"bytes\"]},{\"name\":\"maybe_string_column\",\"type\":[\"null\",{\"type\":\"string\",\"avro.java.string\":\"String\"}]}]}");
+ public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }
+ @Deprecated public java.lang.Boolean maybe_bool_column;
+ @Deprecated public java.lang.Integer maybe_int_column;
+ @Deprecated public java.lang.Long maybe_long_column;
+ @Deprecated public java.lang.Float maybe_float_column;
+ @Deprecated public java.lang.Double maybe_double_column;
+ @Deprecated public java.nio.ByteBuffer maybe_binary_column;
+ @Deprecated public java.lang.String maybe_string_column;
+
+ /**
+ * Default constructor. Note that this does not initialize fields
+ * to their default values from the schema. If that is desired then
+ * one should use <code>newBuilder()</code>.
+ */
+ public AvroOptionalPrimitives() {}
+
+ /**
+ * All-args constructor.
+ */
+ public AvroOptionalPrimitives(java.lang.Boolean maybe_bool_column, java.lang.Integer maybe_int_column, java.lang.Long maybe_long_column, java.lang.Float maybe_float_column, java.lang.Double maybe_double_column, java.nio.ByteBuffer maybe_binary_column, java.lang.String maybe_string_column) {
+ this.maybe_bool_column = maybe_bool_column;
+ this.maybe_int_column = maybe_int_column;
+ this.maybe_long_column = maybe_long_column;
+ this.maybe_float_column = maybe_float_column;
+ this.maybe_double_column = maybe_double_column;
+ this.maybe_binary_column = maybe_binary_column;
+ this.maybe_string_column = maybe_string_column;
+ }
+
+ public org.apache.avro.Schema getSchema() { return SCHEMA$; }
+ // Used by DatumWriter. Applications should not call.
+ public java.lang.Object get(int field$) {
+ switch (field$) {
+ case 0: return maybe_bool_column;
+ case 1: return maybe_int_column;
+ case 2: return maybe_long_column;
+ case 3: return maybe_float_column;
+ case 4: return maybe_double_column;
+ case 5: return maybe_binary_column;
+ case 6: return maybe_string_column;
+ default: throw new org.apache.avro.AvroRuntimeException("Bad index");
+ }
+ }
+ // Used by DatumReader. Applications should not call.
+ @SuppressWarnings(value="unchecked")
+ public void put(int field$, java.lang.Object value$) {
+ switch (field$) {
+ case 0: maybe_bool_column = (java.lang.Boolean)value$; break;
+ case 1: maybe_int_column = (java.lang.Integer)value$; break;
+ case 2: maybe_long_column = (java.lang.Long)value$; break;
+ case 3: maybe_float_column = (java.lang.Float)value$; break;
+ case 4: maybe_double_column = (java.lang.Double)value$; break;
+ case 5: maybe_binary_column = (java.nio.ByteBuffer)value$; break;
+ case 6: maybe_string_column = (java.lang.String)value$; break;
+ default: throw new org.apache.avro.AvroRuntimeException("Bad index");
+ }
+ }
+
+ /**
+ * Gets the value of the 'maybe_bool_column' field.
+ */
+ public java.lang.Boolean getMaybeBoolColumn() {
+ return maybe_bool_column;
+ }
+
+ /**
+ * Sets the value of the 'maybe_bool_column' field.
+ * @param value the value to set.
+ */
+ public void setMaybeBoolColumn(java.lang.Boolean value) {
+ this.maybe_bool_column = value;
+ }
+
+ /**
+ * Gets the value of the 'maybe_int_column' field.
+ */
+ public java.lang.Integer getMaybeIntColumn() {
+ return maybe_int_column;
+ }
+
+ /**
+ * Sets the value of the 'maybe_int_column' field.
+ * @param value the value to set.
+ */
+ public void setMaybeIntColumn(java.lang.Integer value) {
+ this.maybe_int_column = value;
+ }
+
+ /**
+ * Gets the value of the 'maybe_long_column' field.
+ */
+ public java.lang.Long getMaybeLongColumn() {
+ return maybe_long_column;
+ }
+
+ /**
+ * Sets the value of the 'maybe_long_column' field.
+ * @param value the value to set.
+ */
+ public void setMaybeLongColumn(java.lang.Long value) {
+ this.maybe_long_column = value;
+ }
+
+ /**
+ * Gets the value of the 'maybe_float_column' field.
+ */
+ public java.lang.Float getMaybeFloatColumn() {
+ return maybe_float_column;
+ }
+
+ /**
+ * Sets the value of the 'maybe_float_column' field.
+ * @param value the value to set.
+ */
+ public void setMaybeFloatColumn(java.lang.Float value) {
+ this.maybe_float_column = value;
+ }
+
+ /**
+ * Gets the value of the 'maybe_double_column' field.
+ */
+ public java.lang.Double getMaybeDoubleColumn() {
+ return maybe_double_column;
+ }
+
+ /**
+ * Sets the value of the 'maybe_double_column' field.
+ * @param value the value to set.
+ */
+ public void setMaybeDoubleColumn(java.lang.Double value) {
+ this.maybe_double_column = value;
+ }
+
+ /**
+ * Gets the value of the 'maybe_binary_column' field.
+ */
+ public java.nio.ByteBuffer getMaybeBinaryColumn() {
+ return maybe_binary_column;
+ }
+
+ /**
+ * Sets the value of the 'maybe_binary_column' field.
+ * @param value the value to set.
+ */
+ public void setMaybeBinaryColumn(java.nio.ByteBuffer value) {
+ this.maybe_binary_column = value;
+ }
+
+ /**
+ * Gets the value of the 'maybe_string_column' field.
+ */
+ public java.lang.String getMaybeStringColumn() {
+ return maybe_string_column;
+ }
+
+ /**
+ * Sets the value of the 'maybe_string_column' field.
+ * @param value the value to set.
+ */
+ public void setMaybeStringColumn(java.lang.String value) {
+ this.maybe_string_column = value;
+ }
+
+ /** Creates a new AvroOptionalPrimitives RecordBuilder */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder newBuilder() {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder();
+ }
+
+ /** Creates a new AvroOptionalPrimitives RecordBuilder by copying an existing Builder */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder newBuilder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder other) {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder(other);
+ }
+
+ /** Creates a new AvroOptionalPrimitives RecordBuilder by copying an existing AvroOptionalPrimitives instance */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder newBuilder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives other) {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder(other);
+ }
+
+ /**
+ * RecordBuilder for AvroOptionalPrimitives instances.
+ */
+ public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase<AvroOptionalPrimitives>
+ implements org.apache.avro.data.RecordBuilder<AvroOptionalPrimitives> {
+
+ private java.lang.Boolean maybe_bool_column;
+ private java.lang.Integer maybe_int_column;
+ private java.lang.Long maybe_long_column;
+ private java.lang.Float maybe_float_column;
+ private java.lang.Double maybe_double_column;
+ private java.nio.ByteBuffer maybe_binary_column;
+ private java.lang.String maybe_string_column;
+
+ /** Creates a new Builder */
+ private Builder() {
+ super(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.SCHEMA$);
+ }
+
+ /** Creates a Builder by copying an existing Builder */
+ private Builder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder other) {
+ super(other);
+ if (isValidValue(fields()[0], other.maybe_bool_column)) {
+ this.maybe_bool_column = data().deepCopy(fields()[0].schema(), other.maybe_bool_column);
+ fieldSetFlags()[0] = true;
+ }
+ if (isValidValue(fields()[1], other.maybe_int_column)) {
+ this.maybe_int_column = data().deepCopy(fields()[1].schema(), other.maybe_int_column);
+ fieldSetFlags()[1] = true;
+ }
+ if (isValidValue(fields()[2], other.maybe_long_column)) {
+ this.maybe_long_column = data().deepCopy(fields()[2].schema(), other.maybe_long_column);
+ fieldSetFlags()[2] = true;
+ }
+ if (isValidValue(fields()[3], other.maybe_float_column)) {
+ this.maybe_float_column = data().deepCopy(fields()[3].schema(), other.maybe_float_column);
+ fieldSetFlags()[3] = true;
+ }
+ if (isValidValue(fields()[4], other.maybe_double_column)) {
+ this.maybe_double_column = data().deepCopy(fields()[4].schema(), other.maybe_double_column);
+ fieldSetFlags()[4] = true;
+ }
+ if (isValidValue(fields()[5], other.maybe_binary_column)) {
+ this.maybe_binary_column = data().deepCopy(fields()[5].schema(), other.maybe_binary_column);
+ fieldSetFlags()[5] = true;
+ }
+ if (isValidValue(fields()[6], other.maybe_string_column)) {
+ this.maybe_string_column = data().deepCopy(fields()[6].schema(), other.maybe_string_column);
+ fieldSetFlags()[6] = true;
+ }
+ }
+
+ /** Creates a Builder by copying an existing AvroOptionalPrimitives instance */
+ private Builder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives other) {
+ super(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.SCHEMA$);
+ if (isValidValue(fields()[0], other.maybe_bool_column)) {
+ this.maybe_bool_column = data().deepCopy(fields()[0].schema(), other.maybe_bool_column);
+ fieldSetFlags()[0] = true;
+ }
+ if (isValidValue(fields()[1], other.maybe_int_column)) {
+ this.maybe_int_column = data().deepCopy(fields()[1].schema(), other.maybe_int_column);
+ fieldSetFlags()[1] = true;
+ }
+ if (isValidValue(fields()[2], other.maybe_long_column)) {
+ this.maybe_long_column = data().deepCopy(fields()[2].schema(), other.maybe_long_column);
+ fieldSetFlags()[2] = true;
+ }
+ if (isValidValue(fields()[3], other.maybe_float_column)) {
+ this.maybe_float_column = data().deepCopy(fields()[3].schema(), other.maybe_float_column);
+ fieldSetFlags()[3] = true;
+ }
+ if (isValidValue(fields()[4], other.maybe_double_column)) {
+ this.maybe_double_column = data().deepCopy(fields()[4].schema(), other.maybe_double_column);
+ fieldSetFlags()[4] = true;
+ }
+ if (isValidValue(fields()[5], other.maybe_binary_column)) {
+ this.maybe_binary_column = data().deepCopy(fields()[5].schema(), other.maybe_binary_column);
+ fieldSetFlags()[5] = true;
+ }
+ if (isValidValue(fields()[6], other.maybe_string_column)) {
+ this.maybe_string_column = data().deepCopy(fields()[6].schema(), other.maybe_string_column);
+ fieldSetFlags()[6] = true;
+ }
+ }
+
+ /** Gets the value of the 'maybe_bool_column' field */
+ public java.lang.Boolean getMaybeBoolColumn() {
+ return maybe_bool_column;
+ }
+
+ /** Sets the value of the 'maybe_bool_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder setMaybeBoolColumn(java.lang.Boolean value) {
+ validate(fields()[0], value);
+ this.maybe_bool_column = value;
+ fieldSetFlags()[0] = true;
+ return this;
+ }
+
+ /** Checks whether the 'maybe_bool_column' field has been set */
+ public boolean hasMaybeBoolColumn() {
+ return fieldSetFlags()[0];
+ }
+
+ /** Clears the value of the 'maybe_bool_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder clearMaybeBoolColumn() {
+ maybe_bool_column = null;
+ fieldSetFlags()[0] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'maybe_int_column' field */
+ public java.lang.Integer getMaybeIntColumn() {
+ return maybe_int_column;
+ }
+
+ /** Sets the value of the 'maybe_int_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder setMaybeIntColumn(java.lang.Integer value) {
+ validate(fields()[1], value);
+ this.maybe_int_column = value;
+ fieldSetFlags()[1] = true;
+ return this;
+ }
+
+ /** Checks whether the 'maybe_int_column' field has been set */
+ public boolean hasMaybeIntColumn() {
+ return fieldSetFlags()[1];
+ }
+
+ /** Clears the value of the 'maybe_int_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder clearMaybeIntColumn() {
+ maybe_int_column = null;
+ fieldSetFlags()[1] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'maybe_long_column' field */
+ public java.lang.Long getMaybeLongColumn() {
+ return maybe_long_column;
+ }
+
+ /** Sets the value of the 'maybe_long_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder setMaybeLongColumn(java.lang.Long value) {
+ validate(fields()[2], value);
+ this.maybe_long_column = value;
+ fieldSetFlags()[2] = true;
+ return this;
+ }
+
+ /** Checks whether the 'maybe_long_column' field has been set */
+ public boolean hasMaybeLongColumn() {
+ return fieldSetFlags()[2];
+ }
+
+ /** Clears the value of the 'maybe_long_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder clearMaybeLongColumn() {
+ maybe_long_column = null;
+ fieldSetFlags()[2] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'maybe_float_column' field */
+ public java.lang.Float getMaybeFloatColumn() {
+ return maybe_float_column;
+ }
+
+ /** Sets the value of the 'maybe_float_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder setMaybeFloatColumn(java.lang.Float value) {
+ validate(fields()[3], value);
+ this.maybe_float_column = value;
+ fieldSetFlags()[3] = true;
+ return this;
+ }
+
+ /** Checks whether the 'maybe_float_column' field has been set */
+ public boolean hasMaybeFloatColumn() {
+ return fieldSetFlags()[3];
+ }
+
+ /** Clears the value of the 'maybe_float_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder clearMaybeFloatColumn() {
+ maybe_float_column = null;
+ fieldSetFlags()[3] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'maybe_double_column' field */
+ public java.lang.Double getMaybeDoubleColumn() {
+ return maybe_double_column;
+ }
+
+ /** Sets the value of the 'maybe_double_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder setMaybeDoubleColumn(java.lang.Double value) {
+ validate(fields()[4], value);
+ this.maybe_double_column = value;
+ fieldSetFlags()[4] = true;
+ return this;
+ }
+
+ /** Checks whether the 'maybe_double_column' field has been set */
+ public boolean hasMaybeDoubleColumn() {
+ return fieldSetFlags()[4];
+ }
+
+ /** Clears the value of the 'maybe_double_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder clearMaybeDoubleColumn() {
+ maybe_double_column = null;
+ fieldSetFlags()[4] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'maybe_binary_column' field */
+ public java.nio.ByteBuffer getMaybeBinaryColumn() {
+ return maybe_binary_column;
+ }
+
+ /** Sets the value of the 'maybe_binary_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder setMaybeBinaryColumn(java.nio.ByteBuffer value) {
+ validate(fields()[5], value);
+ this.maybe_binary_column = value;
+ fieldSetFlags()[5] = true;
+ return this;
+ }
+
+ /** Checks whether the 'maybe_binary_column' field has been set */
+ public boolean hasMaybeBinaryColumn() {
+ return fieldSetFlags()[5];
+ }
+
+ /** Clears the value of the 'maybe_binary_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder clearMaybeBinaryColumn() {
+ maybe_binary_column = null;
+ fieldSetFlags()[5] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'maybe_string_column' field */
+ public java.lang.String getMaybeStringColumn() {
+ return maybe_string_column;
+ }
+
+ /** Sets the value of the 'maybe_string_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder setMaybeStringColumn(java.lang.String value) {
+ validate(fields()[6], value);
+ this.maybe_string_column = value;
+ fieldSetFlags()[6] = true;
+ return this;
+ }
+
+ /** Checks whether the 'maybe_string_column' field has been set */
+ public boolean hasMaybeStringColumn() {
+ return fieldSetFlags()[6];
+ }
+
+ /** Clears the value of the 'maybe_string_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroOptionalPrimitives.Builder clearMaybeStringColumn() {
+ maybe_string_column = null;
+ fieldSetFlags()[6] = false;
+ return this;
+ }
+
+ @Override
+ public AvroOptionalPrimitives build() {
+ try {
+ AvroOptionalPrimitives record = new AvroOptionalPrimitives();
+ record.maybe_bool_column = fieldSetFlags()[0] ? this.maybe_bool_column : (java.lang.Boolean) defaultValue(fields()[0]);
+ record.maybe_int_column = fieldSetFlags()[1] ? this.maybe_int_column : (java.lang.Integer) defaultValue(fields()[1]);
+ record.maybe_long_column = fieldSetFlags()[2] ? this.maybe_long_column : (java.lang.Long) defaultValue(fields()[2]);
+ record.maybe_float_column = fieldSetFlags()[3] ? this.maybe_float_column : (java.lang.Float) defaultValue(fields()[3]);
+ record.maybe_double_column = fieldSetFlags()[4] ? this.maybe_double_column : (java.lang.Double) defaultValue(fields()[4]);
+ record.maybe_binary_column = fieldSetFlags()[5] ? this.maybe_binary_column : (java.nio.ByteBuffer) defaultValue(fields()[5]);
+ record.maybe_string_column = fieldSetFlags()[6] ? this.maybe_string_column : (java.lang.String) defaultValue(fields()[6]);
+ return record;
+ } catch (Exception e) {
+ throw new org.apache.avro.AvroRuntimeException(e);
+ }
+ }
+ }
+}
diff --git a/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroPrimitives.java b/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroPrimitives.java
new file mode 100644
index 0000000000..1c2afed167
--- /dev/null
+++ b/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/AvroPrimitives.java
@@ -0,0 +1,461 @@
+/**
+ * Autogenerated by Avro
+ *
+ * DO NOT EDIT DIRECTLY
+ */
+package org.apache.spark.sql.execution.datasources.parquet.test.avro;
+@SuppressWarnings("all")
+@org.apache.avro.specific.AvroGenerated
+public class AvroPrimitives extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {
+ public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"AvroPrimitives\",\"namespace\":\"org.apache.spark.sql.execution.datasources.parquet.test.avro\",\"fields\":[{\"name\":\"bool_column\",\"type\":\"boolean\"},{\"name\":\"int_column\",\"type\":\"int\"},{\"name\":\"long_column\",\"type\":\"long\"},{\"name\":\"float_column\",\"type\":\"float\"},{\"name\":\"double_column\",\"type\":\"double\"},{\"name\":\"binary_column\",\"type\":\"bytes\"},{\"name\":\"string_column\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}]}");
+ public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }
+ @Deprecated public boolean bool_column;
+ @Deprecated public int int_column;
+ @Deprecated public long long_column;
+ @Deprecated public float float_column;
+ @Deprecated public double double_column;
+ @Deprecated public java.nio.ByteBuffer binary_column;
+ @Deprecated public java.lang.String string_column;
+
+ /**
+ * Default constructor. Note that this does not initialize fields
+ * to their default values from the schema. If that is desired then
+ * one should use <code>newBuilder()</code>.
+ */
+ public AvroPrimitives() {}
+
+ /**
+ * All-args constructor.
+ */
+ public AvroPrimitives(java.lang.Boolean bool_column, java.lang.Integer int_column, java.lang.Long long_column, java.lang.Float float_column, java.lang.Double double_column, java.nio.ByteBuffer binary_column, java.lang.String string_column) {
+ this.bool_column = bool_column;
+ this.int_column = int_column;
+ this.long_column = long_column;
+ this.float_column = float_column;
+ this.double_column = double_column;
+ this.binary_column = binary_column;
+ this.string_column = string_column;
+ }
+
+ public org.apache.avro.Schema getSchema() { return SCHEMA$; }
+ // Used by DatumWriter. Applications should not call.
+ public java.lang.Object get(int field$) {
+ switch (field$) {
+ case 0: return bool_column;
+ case 1: return int_column;
+ case 2: return long_column;
+ case 3: return float_column;
+ case 4: return double_column;
+ case 5: return binary_column;
+ case 6: return string_column;
+ default: throw new org.apache.avro.AvroRuntimeException("Bad index");
+ }
+ }
+ // Used by DatumReader. Applications should not call.
+ @SuppressWarnings(value="unchecked")
+ public void put(int field$, java.lang.Object value$) {
+ switch (field$) {
+ case 0: bool_column = (java.lang.Boolean)value$; break;
+ case 1: int_column = (java.lang.Integer)value$; break;
+ case 2: long_column = (java.lang.Long)value$; break;
+ case 3: float_column = (java.lang.Float)value$; break;
+ case 4: double_column = (java.lang.Double)value$; break;
+ case 5: binary_column = (java.nio.ByteBuffer)value$; break;
+ case 6: string_column = (java.lang.String)value$; break;
+ default: throw new org.apache.avro.AvroRuntimeException("Bad index");
+ }
+ }
+
+ /**
+ * Gets the value of the 'bool_column' field.
+ */
+ public java.lang.Boolean getBoolColumn() {
+ return bool_column;
+ }
+
+ /**
+ * Sets the value of the 'bool_column' field.
+ * @param value the value to set.
+ */
+ public void setBoolColumn(java.lang.Boolean value) {
+ this.bool_column = value;
+ }
+
+ /**
+ * Gets the value of the 'int_column' field.
+ */
+ public java.lang.Integer getIntColumn() {
+ return int_column;
+ }
+
+ /**
+ * Sets the value of the 'int_column' field.
+ * @param value the value to set.
+ */
+ public void setIntColumn(java.lang.Integer value) {
+ this.int_column = value;
+ }
+
+ /**
+ * Gets the value of the 'long_column' field.
+ */
+ public java.lang.Long getLongColumn() {
+ return long_column;
+ }
+
+ /**
+ * Sets the value of the 'long_column' field.
+ * @param value the value to set.
+ */
+ public void setLongColumn(java.lang.Long value) {
+ this.long_column = value;
+ }
+
+ /**
+ * Gets the value of the 'float_column' field.
+ */
+ public java.lang.Float getFloatColumn() {
+ return float_column;
+ }
+
+ /**
+ * Sets the value of the 'float_column' field.
+ * @param value the value to set.
+ */
+ public void setFloatColumn(java.lang.Float value) {
+ this.float_column = value;
+ }
+
+ /**
+ * Gets the value of the 'double_column' field.
+ */
+ public java.lang.Double getDoubleColumn() {
+ return double_column;
+ }
+
+ /**
+ * Sets the value of the 'double_column' field.
+ * @param value the value to set.
+ */
+ public void setDoubleColumn(java.lang.Double value) {
+ this.double_column = value;
+ }
+
+ /**
+ * Gets the value of the 'binary_column' field.
+ */
+ public java.nio.ByteBuffer getBinaryColumn() {
+ return binary_column;
+ }
+
+ /**
+ * Sets the value of the 'binary_column' field.
+ * @param value the value to set.
+ */
+ public void setBinaryColumn(java.nio.ByteBuffer value) {
+ this.binary_column = value;
+ }
+
+ /**
+ * Gets the value of the 'string_column' field.
+ */
+ public java.lang.String getStringColumn() {
+ return string_column;
+ }
+
+ /**
+ * Sets the value of the 'string_column' field.
+ * @param value the value to set.
+ */
+ public void setStringColumn(java.lang.String value) {
+ this.string_column = value;
+ }
+
+ /** Creates a new AvroPrimitives RecordBuilder */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder newBuilder() {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder();
+ }
+
+ /** Creates a new AvroPrimitives RecordBuilder by copying an existing Builder */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder newBuilder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder other) {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder(other);
+ }
+
+ /** Creates a new AvroPrimitives RecordBuilder by copying an existing AvroPrimitives instance */
+ public static org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder newBuilder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives other) {
+ return new org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder(other);
+ }
+
+ /**
+ * RecordBuilder for AvroPrimitives instances.
+ */
+ public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase<AvroPrimitives>
+ implements org.apache.avro.data.RecordBuilder<AvroPrimitives> {
+
+ private boolean bool_column;
+ private int int_column;
+ private long long_column;
+ private float float_column;
+ private double double_column;
+ private java.nio.ByteBuffer binary_column;
+ private java.lang.String string_column;
+
+ /** Creates a new Builder */
+ private Builder() {
+ super(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.SCHEMA$);
+ }
+
+ /** Creates a Builder by copying an existing Builder */
+ private Builder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder other) {
+ super(other);
+ if (isValidValue(fields()[0], other.bool_column)) {
+ this.bool_column = data().deepCopy(fields()[0].schema(), other.bool_column);
+ fieldSetFlags()[0] = true;
+ }
+ if (isValidValue(fields()[1], other.int_column)) {
+ this.int_column = data().deepCopy(fields()[1].schema(), other.int_column);
+ fieldSetFlags()[1] = true;
+ }
+ if (isValidValue(fields()[2], other.long_column)) {
+ this.long_column = data().deepCopy(fields()[2].schema(), other.long_column);
+ fieldSetFlags()[2] = true;
+ }
+ if (isValidValue(fields()[3], other.float_column)) {
+ this.float_column = data().deepCopy(fields()[3].schema(), other.float_column);
+ fieldSetFlags()[3] = true;
+ }
+ if (isValidValue(fields()[4], other.double_column)) {
+ this.double_column = data().deepCopy(fields()[4].schema(), other.double_column);
+ fieldSetFlags()[4] = true;
+ }
+ if (isValidValue(fields()[5], other.binary_column)) {
+ this.binary_column = data().deepCopy(fields()[5].schema(), other.binary_column);
+ fieldSetFlags()[5] = true;
+ }
+ if (isValidValue(fields()[6], other.string_column)) {
+ this.string_column = data().deepCopy(fields()[6].schema(), other.string_column);
+ fieldSetFlags()[6] = true;
+ }
+ }
+
+ /** Creates a Builder by copying an existing AvroPrimitives instance */
+ private Builder(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives other) {
+ super(org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.SCHEMA$);
+ if (isValidValue(fields()[0], other.bool_column)) {
+ this.bool_column = data().deepCopy(fields()[0].schema(), other.bool_column);
+ fieldSetFlags()[0] = true;
+ }
+ if (isValidValue(fields()[1], other.int_column)) {
+ this.int_column = data().deepCopy(fields()[1].schema(), other.int_column);
+ fieldSetFlags()[1] = true;
+ }
+ if (isValidValue(fields()[2], other.long_column)) {
+ this.long_column = data().deepCopy(fields()[2].schema(), other.long_column);
+ fieldSetFlags()[2] = true;
+ }
+ if (isValidValue(fields()[3], other.float_column)) {
+ this.float_column = data().deepCopy(fields()[3].schema(), other.float_column);
+ fieldSetFlags()[3] = true;
+ }
+ if (isValidValue(fields()[4], other.double_column)) {
+ this.double_column = data().deepCopy(fields()[4].schema(), other.double_column);
+ fieldSetFlags()[4] = true;
+ }
+ if (isValidValue(fields()[5], other.binary_column)) {
+ this.binary_column = data().deepCopy(fields()[5].schema(), other.binary_column);
+ fieldSetFlags()[5] = true;
+ }
+ if (isValidValue(fields()[6], other.string_column)) {
+ this.string_column = data().deepCopy(fields()[6].schema(), other.string_column);
+ fieldSetFlags()[6] = true;
+ }
+ }
+
+ /** Gets the value of the 'bool_column' field */
+ public java.lang.Boolean getBoolColumn() {
+ return bool_column;
+ }
+
+ /** Sets the value of the 'bool_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder setBoolColumn(boolean value) {
+ validate(fields()[0], value);
+ this.bool_column = value;
+ fieldSetFlags()[0] = true;
+ return this;
+ }
+
+ /** Checks whether the 'bool_column' field has been set */
+ public boolean hasBoolColumn() {
+ return fieldSetFlags()[0];
+ }
+
+ /** Clears the value of the 'bool_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder clearBoolColumn() {
+ fieldSetFlags()[0] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'int_column' field */
+ public java.lang.Integer getIntColumn() {
+ return int_column;
+ }
+
+ /** Sets the value of the 'int_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder setIntColumn(int value) {
+ validate(fields()[1], value);
+ this.int_column = value;
+ fieldSetFlags()[1] = true;
+ return this;
+ }
+
+ /** Checks whether the 'int_column' field has been set */
+ public boolean hasIntColumn() {
+ return fieldSetFlags()[1];
+ }
+
+ /** Clears the value of the 'int_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder clearIntColumn() {
+ fieldSetFlags()[1] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'long_column' field */
+ public java.lang.Long getLongColumn() {
+ return long_column;
+ }
+
+ /** Sets the value of the 'long_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder setLongColumn(long value) {
+ validate(fields()[2], value);
+ this.long_column = value;
+ fieldSetFlags()[2] = true;
+ return this;
+ }
+
+ /** Checks whether the 'long_column' field has been set */
+ public boolean hasLongColumn() {
+ return fieldSetFlags()[2];
+ }
+
+ /** Clears the value of the 'long_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder clearLongColumn() {
+ fieldSetFlags()[2] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'float_column' field */
+ public java.lang.Float getFloatColumn() {
+ return float_column;
+ }
+
+ /** Sets the value of the 'float_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder setFloatColumn(float value) {
+ validate(fields()[3], value);
+ this.float_column = value;
+ fieldSetFlags()[3] = true;
+ return this;
+ }
+
+ /** Checks whether the 'float_column' field has been set */
+ public boolean hasFloatColumn() {
+ return fieldSetFlags()[3];
+ }
+
+ /** Clears the value of the 'float_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder clearFloatColumn() {
+ fieldSetFlags()[3] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'double_column' field */
+ public java.lang.Double getDoubleColumn() {
+ return double_column;
+ }
+
+ /** Sets the value of the 'double_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder setDoubleColumn(double value) {
+ validate(fields()[4], value);
+ this.double_column = value;
+ fieldSetFlags()[4] = true;
+ return this;
+ }
+
+ /** Checks whether the 'double_column' field has been set */
+ public boolean hasDoubleColumn() {
+ return fieldSetFlags()[4];
+ }
+
+ /** Clears the value of the 'double_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder clearDoubleColumn() {
+ fieldSetFlags()[4] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'binary_column' field */
+ public java.nio.ByteBuffer getBinaryColumn() {
+ return binary_column;
+ }
+
+ /** Sets the value of the 'binary_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder setBinaryColumn(java.nio.ByteBuffer value) {
+ validate(fields()[5], value);
+ this.binary_column = value;
+ fieldSetFlags()[5] = true;
+ return this;
+ }
+
+ /** Checks whether the 'binary_column' field has been set */
+ public boolean hasBinaryColumn() {
+ return fieldSetFlags()[5];
+ }
+
+ /** Clears the value of the 'binary_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder clearBinaryColumn() {
+ binary_column = null;
+ fieldSetFlags()[5] = false;
+ return this;
+ }
+
+ /** Gets the value of the 'string_column' field */
+ public java.lang.String getStringColumn() {
+ return string_column;
+ }
+
+ /** Sets the value of the 'string_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder setStringColumn(java.lang.String value) {
+ validate(fields()[6], value);
+ this.string_column = value;
+ fieldSetFlags()[6] = true;
+ return this;
+ }
+
+ /** Checks whether the 'string_column' field has been set */
+ public boolean hasStringColumn() {
+ return fieldSetFlags()[6];
+ }
+
+ /** Clears the value of the 'string_column' field */
+ public org.apache.spark.sql.execution.datasources.parquet.test.avro.AvroPrimitives.Builder clearStringColumn() {
+ string_column = null;
+ fieldSetFlags()[6] = false;
+ return this;
+ }
+
+ @Override
+ public AvroPrimitives build() {
+ try {
+ AvroPrimitives record = new AvroPrimitives();
+ record.bool_column = fieldSetFlags()[0] ? this.bool_column : (java.lang.Boolean) defaultValue(fields()[0]);
+ record.int_column = fieldSetFlags()[1] ? this.int_column : (java.lang.Integer) defaultValue(fields()[1]);
+ record.long_column = fieldSetFlags()[2] ? this.long_column : (java.lang.Long) defaultValue(fields()[2]);
+ record.float_column = fieldSetFlags()[3] ? this.float_column : (java.lang.Float) defaultValue(fields()[3]);
+ record.double_column = fieldSetFlags()[4] ? this.double_column : (java.lang.Double) defaultValue(fields()[4]);
+ record.binary_column = fieldSetFlags()[5] ? this.binary_column : (java.nio.ByteBuffer) defaultValue(fields()[5]);
+ record.string_column = fieldSetFlags()[6] ? this.string_column : (java.lang.String) defaultValue(fields()[6]);
+ return record;
+ } catch (Exception e) {
+ throw new org.apache.avro.AvroRuntimeException(e);
+ }
+ }
+ }
+}
diff --git a/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/CompatibilityTest.java b/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/CompatibilityTest.java
index 2368323cb3..28fdc1dfb9 100644
--- a/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/CompatibilityTest.java
+++ b/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/CompatibilityTest.java
@@ -8,7 +8,7 @@ package org.apache.spark.sql.execution.datasources.parquet.test.avro;
@SuppressWarnings("all")
@org.apache.avro.specific.AvroGenerated
public interface CompatibilityTest {
- public static final org.apache.avro.Protocol PROTOCOL = org.apache.avro.Protocol.parse("{\"protocol\":\"CompatibilityTest\",\"namespace\":\"org.apache.spark.sql.execution.datasources.parquet.test.avro\",\"types\":[{\"type\":\"enum\",\"name\":\"Suit\",\"symbols\":[\"SPADES\",\"HEARTS\",\"DIAMONDS\",\"CLUBS\"]},{\"type\":\"record\",\"name\":\"ParquetEnum\",\"fields\":[{\"name\":\"suit\",\"type\":\"Suit\"}]},{\"type\":\"record\",\"name\":\"Nested\",\"fields\":[{\"name\":\"nested_ints_column\",\"type\":{\"type\":\"array\",\"items\":\"int\"}},{\"name\":\"nested_string_column\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}]},{\"type\":\"record\",\"name\":\"ParquetAvroCompat\",\"fields\":[{\"name\":\"bool_column\",\"type\":\"boolean\"},{\"name\":\"int_column\",\"type\":\"int\"},{\"name\":\"long_column\",\"type\":\"long\"},{\"name\":\"float_column\",\"type\":\"float\"},{\"name\":\"double_column\",\"type\":\"double\"},{\"name\":\"binary_column\",\"type\":\"bytes\"},{\"name\":\"string_column\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"}},{\"name\":\"maybe_bool_column\",\"type\":[\"null\",\"boolean\"]},{\"name\":\"maybe_int_column\",\"type\":[\"null\",\"int\"]},{\"name\":\"maybe_long_column\",\"type\":[\"null\",\"long\"]},{\"name\":\"maybe_float_column\",\"type\":[\"null\",\"float\"]},{\"name\":\"maybe_double_column\",\"type\":[\"null\",\"double\"]},{\"name\":\"maybe_binary_column\",\"type\":[\"null\",\"bytes\"]},{\"name\":\"maybe_string_column\",\"type\":[\"null\",{\"type\":\"string\",\"avro.java.string\":\"String\"}]},{\"name\":\"strings_column\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}},{\"name\":\"string_to_int_column\",\"type\":{\"type\":\"map\",\"values\":\"int\",\"avro.java.string\":\"String\"}},{\"name\":\"complex_column\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"array\",\"items\":\"Nested\"},\"avro.java.string\":\"String\"}}]}],\"messages\":{}}");
+ public static final org.apache.avro.Protocol PROTOCOL = org.apache.avro.Protocol.parse("{\"protocol\":\"CompatibilityTest\",\"namespace\":\"org.apache.spark.sql.execution.datasources.parquet.test.avro\",\"types\":[{\"type\":\"enum\",\"name\":\"Suit\",\"symbols\":[\"SPADES\",\"HEARTS\",\"DIAMONDS\",\"CLUBS\"]},{\"type\":\"record\",\"name\":\"ParquetEnum\",\"fields\":[{\"name\":\"suit\",\"type\":\"Suit\"}]},{\"type\":\"record\",\"name\":\"Nested\",\"fields\":[{\"name\":\"nested_ints_column\",\"type\":{\"type\":\"array\",\"items\":\"int\"}},{\"name\":\"nested_string_column\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}]},{\"type\":\"record\",\"name\":\"AvroPrimitives\",\"fields\":[{\"name\":\"bool_column\",\"type\":\"boolean\"},{\"name\":\"int_column\",\"type\":\"int\"},{\"name\":\"long_column\",\"type\":\"long\"},{\"name\":\"float_column\",\"type\":\"float\"},{\"name\":\"double_column\",\"type\":\"double\"},{\"name\":\"binary_column\",\"type\":\"bytes\"},{\"name\":\"string_column\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}]},{\"type\":\"record\",\"name\":\"AvroOptionalPrimitives\",\"fields\":[{\"name\":\"maybe_bool_column\",\"type\":[\"null\",\"boolean\"]},{\"name\":\"maybe_int_column\",\"type\":[\"null\",\"int\"]},{\"name\":\"maybe_long_column\",\"type\":[\"null\",\"long\"]},{\"name\":\"maybe_float_column\",\"type\":[\"null\",\"float\"]},{\"name\":\"maybe_double_column\",\"type\":[\"null\",\"double\"]},{\"name\":\"maybe_binary_column\",\"type\":[\"null\",\"bytes\"]},{\"name\":\"maybe_string_column\",\"type\":[\"null\",{\"type\":\"string\",\"avro.java.string\":\"String\"}]}]},{\"type\":\"record\",\"name\":\"AvroNonNullableArrays\",\"fields\":[{\"name\":\"strings_column\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}},{\"name\":\"maybe_ints_column\",\"type\":[\"null\",{\"type\":\"array\",\"items\":\"int\"}]}]},{\"type\":\"record\",\"name\":\"AvroArrayOfArray\",\"fields\":[{\"name\":\"int_arrays_column\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"array\",\"items\":\"int\"}}}]},{\"type\":\"record\",\"name\":\"AvroMapOfArray\",\"fields\":[{\"name\":\"string_to_ints_column\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"array\",\"items\":\"int\"},\"avro.java.string\":\"String\"}}]},{\"type\":\"record\",\"name\":\"ParquetAvroCompat\",\"fields\":[{\"name\":\"strings_column\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}},{\"name\":\"string_to_int_column\",\"type\":{\"type\":\"map\",\"values\":\"int\",\"avro.java.string\":\"String\"}},{\"name\":\"complex_column\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"array\",\"items\":\"Nested\"},\"avro.java.string\":\"String\"}}]}],\"messages\":{}}");
@SuppressWarnings("all")
public interface Callback extends CompatibilityTest {
diff --git a/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/ParquetAvroCompat.java b/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/ParquetAvroCompat.java
index 681cacbd12..ef12d193f9 100644
--- a/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/ParquetAvroCompat.java
+++ b/sql/core/src/test/gen-java/org/apache/spark/sql/execution/datasources/parquet/test/avro/ParquetAvroCompat.java
@@ -7,22 +7,8 @@ package org.apache.spark.sql.execution.datasources.parquet.test.avro;
@SuppressWarnings("all")
@org.apache.avro.specific.AvroGenerated
public class ParquetAvroCompat extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {
- public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"ParquetAvroCompat\",\"namespace\":\"org.apache.spark.sql.execution.datasources.parquet.test.avro\",\"fields\":[{\"name\":\"bool_column\",\"type\":\"boolean\"},{\"name\":\"int_column\",\"type\":\"int\"},{\"name\":\"long_column\",\"type\":\"long\"},{\"name\":\"float_column\",\"type\":\"float\"},{\"name\":\"double_column\",\"type\":\"double\"},{\"name\":\"binary_column\",\"type\":\"bytes\"},{\"name\":\"string_column\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"}},{\"name\":\"maybe_bool_column\",\"type\":[\"null\",\"boolean\"]},{\"name\":\"maybe_int_column\",\"type\":[\"null\",\"int\"]},{\"name\":\"maybe_long_column\",\"type\":[\"null\",\"long\"]},{\"name\":\"maybe_float_column\",\"type\":[\"null\",\"float\"]},{\"name\":\"maybe_double_column\",\"type\":[\"null\",\"double\"]},{\"name\":\"maybe_binary_column\",\"type\":[\"null\",\"bytes\"]},{\"name\":\"maybe_string_column\",\"type\":[\"null\",{\"type\":\"string\",\"avro.java.string\":\"String\"}]},{\"name\":\"strings_column\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}},{\"name\":\"string_to_int_column\",\"type\":{\"type\":\"map\",\"values\":\"int\",\"avro.java.string\":\"String\"}},{\"name\":\"complex_column\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"Nested\",\"fields\":[{\"name\":\"nested_ints_column\",\"type\":{\"type\":\"array\",\"items\":\"int\"}},{\"name\":\"nested_string_column\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}]}},\"avro.java.string\":\"String\"}}]}");
+ public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"ParquetAvroCompat\",\"namespace\":\"org.apache.spark.sql.execution.datasources.parquet.test.avro\",\"fields\":[{\"name\":\"strings_column\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}},{\"name\":\"string_to_int_column\",\"type\":{\"type\":\"map\",\"values\":\"int\",\"avro.java.string\":\"String\"}},{\"name\":\"complex_column\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"Nested\",\"fields\":[{\"name\":\"nested_ints_column\",\"type\":{\"type\":\"array\",\"items\":\"int\"}},{\"name\":\"nested_string_column\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}]}},\"avro.java.string\":\"String\"}}]}");
public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }
- @Deprecated public boolean bool_column;
- @Deprecated public int int_column;
- @Deprecated public long long_column;
- @Deprecated public float float_column;
- @Deprecated public double double_column;
- @Deprecated public java.nio.ByteBuffer binary_column;
- @Deprecated public java.lang.String string_column;
- @Deprecated public java.lang.Boolean maybe_bool_column;
- @Deprecated public java.lang.Integer maybe_int_column;
- @Deprecated public java.lang.Long maybe_long_column;
- @Deprecated public java.lang.Float maybe_float_column;
- @Deprecated public java.lang.Double maybe_double_column;
- @Deprecated public java.nio.ByteBuffer maybe_binary_column;
- @Deprecated public java.lang.String maybe_string_column;
@Deprecated public java.util.List<java.lang.String> strings_column;
@Deprecated public java.util.Map<java.lang.String,java.lang.Integer> string_to_int_column;
@Deprecated public java.util.Map<java.lang.String,java.util.List<org.apache.spark.sql.execution.datasources.parquet.test.avro.Nested>> complex_column;
@@ -37,21 +23,7 @@ public class ParquetAvroCompat extends org.apache.avro.specific.SpecificRecordBa
/**
* All-args constructor.
*/
- public ParquetAvroCompat(java.lang.Boolean bool_column, java.lang.Integer int_column, java.lang.Long long_column, java.lang.Float float_column, java.lang.Double double_column, java.nio.ByteBuffer binary_column, java.lang.String string_column, java.lang.Boolean maybe_bool_column, java.lang.Integer maybe_int_column, java.lang.Long maybe_long_column, java.lang.Float maybe_float_column, java.lang.Double maybe_double_column, java.nio.ByteBuffer maybe_binary_column, java.lang.String maybe_string_column, java.util.List<java.lang.String> strings_column, java.util.Map<java.lang.String,java.lang.Integer> string_to_int_column, java.util.Map<java.lang.String,java.util.List<org.apache.spark.sql.execution.datasources.parquet.test.avro.Nested>> complex_column) {
- this.bool_column = bool_column;
- this.int_column = int_column;
- this.long_column = long_column;
- this.float_column = float_column;
- this.double_column = double_column;
- this.binary_column = binary_column;
- this.string_column = string_column;
- this.maybe_bool_column = maybe_bool_column;
- this.maybe_int_column = maybe_int_column;
- this.maybe_long_column = maybe_long_column;
- this.maybe_float_column = maybe_float_column;
- this.maybe_double_column = maybe_double_column;
- this.maybe_binary_column = maybe_binary_column;
- this.maybe_string_column = maybe_string_column;
+ public ParquetAvroCompat(java.util.List<java.lang.String> strings_column, java.util.Map<java.lang.String,java.lang.Integer> string_to_int_column, java.util.Map<java.lang.String,java.util.List<org.apache.spark.sql.execution.datasources.parquet.test.avro.Nested>> complex_column) {
this.strings_column = strings_column;
this.string_to_int_column = string_to_int_column;
this.complex_column = complex_column;
@@ -61,23 +33,9 @@ public class ParquetAvroCompat extends org.apache.avro.specific.SpecificRecordBa
// Used by DatumWriter. Applications should not call.
public java.lang.Object get(int field$) {
switch (field$) {
- case 0: return bool_column;
- case 1: return int_column;
- case 2: return long_column;
- case 3: return float_column;
- case 4: return double_column;
- case 5: return binary_column;
- case 6: return string_column;
- case 7: return maybe_bool_column;
- case 8: return maybe_int_column;
- case 9: return maybe_long_column;
- case 10: return maybe_float_column;
- case 11: return maybe_double_column;
- case 12: return maybe_binary_column;
- case 13: return maybe_string_column;
- case 14: return strings_column;
- case 15: return string_to_int_column;
- case 16: return complex_column;
+ case 0: return strings_column;
+ case 1: return string_to_int_column;
+ case 2: return complex_column;
default: throw new org.apache.avro.AvroRuntimeException("Bad index");
}
}
@@ -85,238 +43,14 @@ public class ParquetAvroCompat extends org.apache.avro.specific.SpecificRecordBa
@SuppressWarnings(value="unchecked")
public void put(int field$, java.lang.Object value$) {
switch (field$) {
- case 0: bool_column = (java.lang.Boolean)value$; break;
- case 1: int_column = (java.lang.Integer)value$; break;
- case 2: long_column = (java.lang.Long)value$; break;
- case 3: float_column = (java.lang.Float)value$; break;
- case 4: double_column = (java.lang.Double)value$; break;
- case 5: binary_column = (java.nio.ByteBuffer)value$; break;
- case 6: string_column = (java.lang.String)value$; break;
- case 7: maybe_bool_column = (java.lang.Boolean)value$; break;
- case 8: maybe_int_column = (java.lang.Integer)value$; break;
- case 9: maybe_long_column = (java.lang.Long)value$; break;
- case 10: maybe_float_column = (java.lang.Float)value$; break;
- case 11: maybe_double_column = (java.lang.Double)value$; break;
- case 12: maybe_binary_column = (java.nio.ByteBuffer)value$; break;
- case 13: maybe_string_column = (java.lang.String)value$; break;
- case 14: strings_column = (java.util.List<java.lang.String>)value$; break;
- case 15: string_to_int_column = (java.util.Map<java.lang.String,java.lang.Integer>)value$; break;
- case 16: complex_column = (java.util.Map<java.lang.String,java.util.List<org.apache.spark.sql.execution.datasources.parquet.test.avro.Nested>>)value$; break;
+ case 0: strings_column = (java.util.List<java.lang.String>)value$; break;
+ case 1: string_to_int_column = (java.util.Map<java.lang.String,java.lang.Integer>)value$; break;
+ case 2: complex_column = (java.util.Map<java.lang.String,java.util.List<org.apache.spark.sql.execution.datasources.parquet.test.avro.Nested>>)value$; break;
default: throw new org.apache.avro.AvroRuntimeException("Bad index");
}
}
/**
- * Gets the value of the 'bool_column' field.
- */
- public java.lang.Boolean getBoolColumn() {
- return bool_column;
- }
-
- /**
- * Sets the value of the 'bool_column' field.
- * @param value the value to set.
- */
- public void setBoolColumn(java.lang.Boolean value) {
- this.bool_column = value;
- }
-
- /**
- * Gets the value of the 'int_column' field.
- */
- public java.lang.Integer getIntColumn() {
- return int_column;
- }
-
- /**
- * Sets the value of the 'int_column' field.
- * @param value the value to set.
- */
- public void setIntColumn(java.lang.Integer value) {
- this.int_column = value;
- }
-
- /**
- * Gets the value of the 'long_column' field.
- */
- public java.lang.Long getLongColumn() {
- return long_column;
- }
-
- /**
- * Sets the value of the 'long_column' field.
- * @param value the value to set.
- */
- public void setLongColumn(java.lang.Long value) {
- this.long_column = value;
- }
-
- /**
- * Gets the value of the 'float_column' field.
- */
- public java.lang.Float getFloatColumn() {
- return float_column;
- }
-
- /**
- * Sets the value of the 'float_column' field.
- * @param value the value to set.
- */
- public void setFloatColumn(java.lang.Float value) {
- this.float_column = value;
- }
-
- /**
- * Gets the value of the 'double_column' field.
- */
- public java.lang.Double getDoubleColumn() {
- return double_column;
- }
-
- /**
- * Sets the value of the 'double_column' field.
- * @param value the value to set.
- */
- public void setDoubleColumn(java.lang.Double value) {
- this.double_column = value;
- }
-
- /**
- * Gets the value of the 'binary_column' field.
- */
- public java.nio.ByteBuffer getBinaryColumn() {
- return binary_column;
- }
-
- /**
- * Sets the value of the 'binary_column' field.
- * @param value the value to set.
- */
- public void setBinaryColumn(java.nio.ByteBuffer value) {
- this.binary_column = value;
- }
-
- /**
- * Gets the value of the 'string_column' field.
- */
- public java.lang.String getStringColumn() {
- return string_column;
- }
-
- /**
- * Sets the value of the 'string_column' field.
- * @param value the value to set.
- */
- public void setStringColumn(java.lang.String value) {
- this.string_column = value;
- }
-
- /**
- * Gets the value of the 'maybe_bool_column' field.
- */
- public java.lang.Boolean getMaybeBoolColumn() {
- return maybe_bool_column;
- }
-
- /**
- * Sets the value of the 'maybe_bool_column' field.
- * @param value the value to set.
- */
- public void setMaybeBoolColumn(java.lang.Boolean value) {
- this.maybe_bool_column = value;
- }
-
- /**
- * Gets the value of the 'maybe_int_column' field.
- */
- public java.lang.Integer getMaybeIntColumn() {
- return maybe_int_column;
- }
-
- /**
- * Sets the value of the 'maybe_int_column' field.
- * @param value the value to set.
- */
- public void setMaybeIntColumn(java.lang.Integer value) {
- this.maybe_int_column = value;
- }
-
- /**
- * Gets the value of the 'maybe_long_column' field.
- */
- public java.lang.Long getMaybeLongColumn() {
- return maybe_long_column;
- }
-
- /**
- * Sets the value of the 'maybe_long_column' field.
- * @param value the value to set.
- */
- public void setMaybeLongColumn(java.lang.Long value) {
- this.maybe_long_column = value;
- }
-
- /**
- * Gets the value of the 'maybe_float_column' field.
- */
- public java.lang.Float getMaybeFloatColumn() {
- return maybe_float_column;
- }
-
- /**
- * Sets the value of the 'maybe_float_column' field.
- * @param value the value to set.
- */
- public void setMaybeFloatColumn(java.lang.Float value) {
- this.maybe_float_column = value;
- }
-
- /**
- * Gets the value of the 'maybe_double_column' field.
- */
- public java.lang.Double getMaybeDoubleColumn() {
- return maybe_double_column;
- }
-
- /**
- * Sets the value of the 'maybe_double_column' field.
- * @param value the value to set.
- */
- public void setMaybeDoubleColumn(java.lang.Double value) {
- this.maybe_double_column = value;
- }
-
- /**
- * Gets the value of the 'maybe_binary_column' field.
- */
- public java.nio.ByteBuffer getMaybeBinaryColumn() {
- return maybe_binary_column;
- }
-
- /**
- * Sets the value of the 'maybe_binary_column' field.
- * @param value the value to set.
- */
- public void setMaybeBinaryColumn(java.nio.ByteBuffer value) {
- this.maybe_binary_column = value;
- }
-
- /**
- * Gets the value of the 'maybe_string_column' field.
- */
- public java.lang.String getMaybeStringColumn() {
- return maybe_string_column;
- }
-
- /**
- * Sets the value of the 'maybe_string_column' field.
- * @param value the value to set.
- */
- public void setMaybeStringColumn(java.lang.String value) {
- this.maybe_string_column = value;
- }
-
- /**
* Gets the value of the 'strings_column' field.
*/
public java.util.List<java.lang.String> getStringsColumn() {
@@ -382,20 +116,6 @@ public class ParquetAvroCompat extends org.apache.avro.specific.SpecificRecordBa
public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase<ParquetAvroCompat>
implements org.apache.avro.data.RecordBuilder<ParquetAvroCompat> {
- private boolean bool_column;
- private int int_column;
- private long long_column;
- private float float_column;
- private double double_column;
- private java.nio.ByteBuffer binary_column;
- private java.lang.String string_column;
- private java.lang.Boolean maybe_bool_column;
- private java.lang.Integer maybe_int_column;
- private java.lang.Long maybe_long_column;
- private java.lang.Float maybe_float_column;
- private java.lang.Double maybe_double_column;
- private java.nio.ByteBuffer maybe_binary_column;
- private java.lang.String maybe_string_column;
private java.util.List<java.lang.String> strings_column;
private java.util.Map<java.lang.String,java.lang.Integer> string_to_int_column;
private java.util.Map<java.lang.String,java.util.List<org.apache.spark.sql.execution.datasources.parquet.test.avro.Nested>> complex_column;
@@ -408,492 +128,35 @@ public class ParquetAvroCompat extends org.apache.avro.specific.SpecificRecordBa
/** Creates a Builder by copying an existing Builder */
private Builder(org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder other) {
super(other);
- if (isValidValue(fields()[0], other.bool_column)) {
- this.bool_column = data().deepCopy(fields()[0].schema(), other.bool_column);
+ if (isValidValue(fields()[0], other.strings_column)) {
+ this.strings_column = data().deepCopy(fields()[0].schema(), other.strings_column);
fieldSetFlags()[0] = true;
}
- if (isValidValue(fields()[1], other.int_column)) {
- this.int_column = data().deepCopy(fields()[1].schema(), other.int_column);
+ if (isValidValue(fields()[1], other.string_to_int_column)) {
+ this.string_to_int_column = data().deepCopy(fields()[1].schema(), other.string_to_int_column);
fieldSetFlags()[1] = true;
}
- if (isValidValue(fields()[2], other.long_column)) {
- this.long_column = data().deepCopy(fields()[2].schema(), other.long_column);
+ if (isValidValue(fields()[2], other.complex_column)) {
+ this.complex_column = data().deepCopy(fields()[2].schema(), other.complex_column);
fieldSetFlags()[2] = true;
}
- if (isValidValue(fields()[3], other.float_column)) {
- this.float_column = data().deepCopy(fields()[3].schema(), other.float_column);
- fieldSetFlags()[3] = true;
- }
- if (isValidValue(fields()[4], other.double_column)) {
- this.double_column = data().deepCopy(fields()[4].schema(), other.double_column);
- fieldSetFlags()[4] = true;
- }
- if (isValidValue(fields()[5], other.binary_column)) {
- this.binary_column = data().deepCopy(fields()[5].schema(), other.binary_column);
- fieldSetFlags()[5] = true;
- }
- if (isValidValue(fields()[6], other.string_column)) {
- this.string_column = data().deepCopy(fields()[6].schema(), other.string_column);
- fieldSetFlags()[6] = true;
- }
- if (isValidValue(fields()[7], other.maybe_bool_column)) {
- this.maybe_bool_column = data().deepCopy(fields()[7].schema(), other.maybe_bool_column);
- fieldSetFlags()[7] = true;
- }
- if (isValidValue(fields()[8], other.maybe_int_column)) {
- this.maybe_int_column = data().deepCopy(fields()[8].schema(), other.maybe_int_column);
- fieldSetFlags()[8] = true;
- }
- if (isValidValue(fields()[9], other.maybe_long_column)) {
- this.maybe_long_column = data().deepCopy(fields()[9].schema(), other.maybe_long_column);
- fieldSetFlags()[9] = true;
- }
- if (isValidValue(fields()[10], other.maybe_float_column)) {
- this.maybe_float_column = data().deepCopy(fields()[10].schema(), other.maybe_float_column);
- fieldSetFlags()[10] = true;
- }
- if (isValidValue(fields()[11], other.maybe_double_column)) {
- this.maybe_double_column = data().deepCopy(fields()[11].schema(), other.maybe_double_column);
- fieldSetFlags()[11] = true;
- }
- if (isValidValue(fields()[12], other.maybe_binary_column)) {
- this.maybe_binary_column = data().deepCopy(fields()[12].schema(), other.maybe_binary_column);
- fieldSetFlags()[12] = true;
- }
- if (isValidValue(fields()[13], other.maybe_string_column)) {
- this.maybe_string_column = data().deepCopy(fields()[13].schema(), other.maybe_string_column);
- fieldSetFlags()[13] = true;
- }
- if (isValidValue(fields()[14], other.strings_column)) {
- this.strings_column = data().deepCopy(fields()[14].schema(), other.strings_column);
- fieldSetFlags()[14] = true;
- }
- if (isValidValue(fields()[15], other.string_to_int_column)) {
- this.string_to_int_column = data().deepCopy(fields()[15].schema(), other.string_to_int_column);
- fieldSetFlags()[15] = true;
- }
- if (isValidValue(fields()[16], other.complex_column)) {
- this.complex_column = data().deepCopy(fields()[16].schema(), other.complex_column);
- fieldSetFlags()[16] = true;
- }
}
/** Creates a Builder by copying an existing ParquetAvroCompat instance */
private Builder(org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat other) {
super(org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.SCHEMA$);
- if (isValidValue(fields()[0], other.bool_column)) {
- this.bool_column = data().deepCopy(fields()[0].schema(), other.bool_column);
+ if (isValidValue(fields()[0], other.strings_column)) {
+ this.strings_column = data().deepCopy(fields()[0].schema(), other.strings_column);
fieldSetFlags()[0] = true;
}
- if (isValidValue(fields()[1], other.int_column)) {
- this.int_column = data().deepCopy(fields()[1].schema(), other.int_column);
+ if (isValidValue(fields()[1], other.string_to_int_column)) {
+ this.string_to_int_column = data().deepCopy(fields()[1].schema(), other.string_to_int_column);
fieldSetFlags()[1] = true;
}
- if (isValidValue(fields()[2], other.long_column)) {
- this.long_column = data().deepCopy(fields()[2].schema(), other.long_column);
+ if (isValidValue(fields()[2], other.complex_column)) {
+ this.complex_column = data().deepCopy(fields()[2].schema(), other.complex_column);
fieldSetFlags()[2] = true;
}
- if (isValidValue(fields()[3], other.float_column)) {
- this.float_column = data().deepCopy(fields()[3].schema(), other.float_column);
- fieldSetFlags()[3] = true;
- }
- if (isValidValue(fields()[4], other.double_column)) {
- this.double_column = data().deepCopy(fields()[4].schema(), other.double_column);
- fieldSetFlags()[4] = true;
- }
- if (isValidValue(fields()[5], other.binary_column)) {
- this.binary_column = data().deepCopy(fields()[5].schema(), other.binary_column);
- fieldSetFlags()[5] = true;
- }
- if (isValidValue(fields()[6], other.string_column)) {
- this.string_column = data().deepCopy(fields()[6].schema(), other.string_column);
- fieldSetFlags()[6] = true;
- }
- if (isValidValue(fields()[7], other.maybe_bool_column)) {
- this.maybe_bool_column = data().deepCopy(fields()[7].schema(), other.maybe_bool_column);
- fieldSetFlags()[7] = true;
- }
- if (isValidValue(fields()[8], other.maybe_int_column)) {
- this.maybe_int_column = data().deepCopy(fields()[8].schema(), other.maybe_int_column);
- fieldSetFlags()[8] = true;
- }
- if (isValidValue(fields()[9], other.maybe_long_column)) {
- this.maybe_long_column = data().deepCopy(fields()[9].schema(), other.maybe_long_column);
- fieldSetFlags()[9] = true;
- }
- if (isValidValue(fields()[10], other.maybe_float_column)) {
- this.maybe_float_column = data().deepCopy(fields()[10].schema(), other.maybe_float_column);
- fieldSetFlags()[10] = true;
- }
- if (isValidValue(fields()[11], other.maybe_double_column)) {
- this.maybe_double_column = data().deepCopy(fields()[11].schema(), other.maybe_double_column);
- fieldSetFlags()[11] = true;
- }
- if (isValidValue(fields()[12], other.maybe_binary_column)) {
- this.maybe_binary_column = data().deepCopy(fields()[12].schema(), other.maybe_binary_column);
- fieldSetFlags()[12] = true;
- }
- if (isValidValue(fields()[13], other.maybe_string_column)) {
- this.maybe_string_column = data().deepCopy(fields()[13].schema(), other.maybe_string_column);
- fieldSetFlags()[13] = true;
- }
- if (isValidValue(fields()[14], other.strings_column)) {
- this.strings_column = data().deepCopy(fields()[14].schema(), other.strings_column);
- fieldSetFlags()[14] = true;
- }
- if (isValidValue(fields()[15], other.string_to_int_column)) {
- this.string_to_int_column = data().deepCopy(fields()[15].schema(), other.string_to_int_column);
- fieldSetFlags()[15] = true;
- }
- if (isValidValue(fields()[16], other.complex_column)) {
- this.complex_column = data().deepCopy(fields()[16].schema(), other.complex_column);
- fieldSetFlags()[16] = true;
- }
- }
-
- /** Gets the value of the 'bool_column' field */
- public java.lang.Boolean getBoolColumn() {
- return bool_column;
- }
-
- /** Sets the value of the 'bool_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setBoolColumn(boolean value) {
- validate(fields()[0], value);
- this.bool_column = value;
- fieldSetFlags()[0] = true;
- return this;
- }
-
- /** Checks whether the 'bool_column' field has been set */
- public boolean hasBoolColumn() {
- return fieldSetFlags()[0];
- }
-
- /** Clears the value of the 'bool_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearBoolColumn() {
- fieldSetFlags()[0] = false;
- return this;
- }
-
- /** Gets the value of the 'int_column' field */
- public java.lang.Integer getIntColumn() {
- return int_column;
- }
-
- /** Sets the value of the 'int_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setIntColumn(int value) {
- validate(fields()[1], value);
- this.int_column = value;
- fieldSetFlags()[1] = true;
- return this;
- }
-
- /** Checks whether the 'int_column' field has been set */
- public boolean hasIntColumn() {
- return fieldSetFlags()[1];
- }
-
- /** Clears the value of the 'int_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearIntColumn() {
- fieldSetFlags()[1] = false;
- return this;
- }
-
- /** Gets the value of the 'long_column' field */
- public java.lang.Long getLongColumn() {
- return long_column;
- }
-
- /** Sets the value of the 'long_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setLongColumn(long value) {
- validate(fields()[2], value);
- this.long_column = value;
- fieldSetFlags()[2] = true;
- return this;
- }
-
- /** Checks whether the 'long_column' field has been set */
- public boolean hasLongColumn() {
- return fieldSetFlags()[2];
- }
-
- /** Clears the value of the 'long_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearLongColumn() {
- fieldSetFlags()[2] = false;
- return this;
- }
-
- /** Gets the value of the 'float_column' field */
- public java.lang.Float getFloatColumn() {
- return float_column;
- }
-
- /** Sets the value of the 'float_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setFloatColumn(float value) {
- validate(fields()[3], value);
- this.float_column = value;
- fieldSetFlags()[3] = true;
- return this;
- }
-
- /** Checks whether the 'float_column' field has been set */
- public boolean hasFloatColumn() {
- return fieldSetFlags()[3];
- }
-
- /** Clears the value of the 'float_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearFloatColumn() {
- fieldSetFlags()[3] = false;
- return this;
- }
-
- /** Gets the value of the 'double_column' field */
- public java.lang.Double getDoubleColumn() {
- return double_column;
- }
-
- /** Sets the value of the 'double_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setDoubleColumn(double value) {
- validate(fields()[4], value);
- this.double_column = value;
- fieldSetFlags()[4] = true;
- return this;
- }
-
- /** Checks whether the 'double_column' field has been set */
- public boolean hasDoubleColumn() {
- return fieldSetFlags()[4];
- }
-
- /** Clears the value of the 'double_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearDoubleColumn() {
- fieldSetFlags()[4] = false;
- return this;
- }
-
- /** Gets the value of the 'binary_column' field */
- public java.nio.ByteBuffer getBinaryColumn() {
- return binary_column;
- }
-
- /** Sets the value of the 'binary_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setBinaryColumn(java.nio.ByteBuffer value) {
- validate(fields()[5], value);
- this.binary_column = value;
- fieldSetFlags()[5] = true;
- return this;
- }
-
- /** Checks whether the 'binary_column' field has been set */
- public boolean hasBinaryColumn() {
- return fieldSetFlags()[5];
- }
-
- /** Clears the value of the 'binary_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearBinaryColumn() {
- binary_column = null;
- fieldSetFlags()[5] = false;
- return this;
- }
-
- /** Gets the value of the 'string_column' field */
- public java.lang.String getStringColumn() {
- return string_column;
- }
-
- /** Sets the value of the 'string_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setStringColumn(java.lang.String value) {
- validate(fields()[6], value);
- this.string_column = value;
- fieldSetFlags()[6] = true;
- return this;
- }
-
- /** Checks whether the 'string_column' field has been set */
- public boolean hasStringColumn() {
- return fieldSetFlags()[6];
- }
-
- /** Clears the value of the 'string_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearStringColumn() {
- string_column = null;
- fieldSetFlags()[6] = false;
- return this;
- }
-
- /** Gets the value of the 'maybe_bool_column' field */
- public java.lang.Boolean getMaybeBoolColumn() {
- return maybe_bool_column;
- }
-
- /** Sets the value of the 'maybe_bool_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setMaybeBoolColumn(java.lang.Boolean value) {
- validate(fields()[7], value);
- this.maybe_bool_column = value;
- fieldSetFlags()[7] = true;
- return this;
- }
-
- /** Checks whether the 'maybe_bool_column' field has been set */
- public boolean hasMaybeBoolColumn() {
- return fieldSetFlags()[7];
- }
-
- /** Clears the value of the 'maybe_bool_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearMaybeBoolColumn() {
- maybe_bool_column = null;
- fieldSetFlags()[7] = false;
- return this;
- }
-
- /** Gets the value of the 'maybe_int_column' field */
- public java.lang.Integer getMaybeIntColumn() {
- return maybe_int_column;
- }
-
- /** Sets the value of the 'maybe_int_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setMaybeIntColumn(java.lang.Integer value) {
- validate(fields()[8], value);
- this.maybe_int_column = value;
- fieldSetFlags()[8] = true;
- return this;
- }
-
- /** Checks whether the 'maybe_int_column' field has been set */
- public boolean hasMaybeIntColumn() {
- return fieldSetFlags()[8];
- }
-
- /** Clears the value of the 'maybe_int_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearMaybeIntColumn() {
- maybe_int_column = null;
- fieldSetFlags()[8] = false;
- return this;
- }
-
- /** Gets the value of the 'maybe_long_column' field */
- public java.lang.Long getMaybeLongColumn() {
- return maybe_long_column;
- }
-
- /** Sets the value of the 'maybe_long_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setMaybeLongColumn(java.lang.Long value) {
- validate(fields()[9], value);
- this.maybe_long_column = value;
- fieldSetFlags()[9] = true;
- return this;
- }
-
- /** Checks whether the 'maybe_long_column' field has been set */
- public boolean hasMaybeLongColumn() {
- return fieldSetFlags()[9];
- }
-
- /** Clears the value of the 'maybe_long_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearMaybeLongColumn() {
- maybe_long_column = null;
- fieldSetFlags()[9] = false;
- return this;
- }
-
- /** Gets the value of the 'maybe_float_column' field */
- public java.lang.Float getMaybeFloatColumn() {
- return maybe_float_column;
- }
-
- /** Sets the value of the 'maybe_float_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setMaybeFloatColumn(java.lang.Float value) {
- validate(fields()[10], value);
- this.maybe_float_column = value;
- fieldSetFlags()[10] = true;
- return this;
- }
-
- /** Checks whether the 'maybe_float_column' field has been set */
- public boolean hasMaybeFloatColumn() {
- return fieldSetFlags()[10];
- }
-
- /** Clears the value of the 'maybe_float_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearMaybeFloatColumn() {
- maybe_float_column = null;
- fieldSetFlags()[10] = false;
- return this;
- }
-
- /** Gets the value of the 'maybe_double_column' field */
- public java.lang.Double getMaybeDoubleColumn() {
- return maybe_double_column;
- }
-
- /** Sets the value of the 'maybe_double_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setMaybeDoubleColumn(java.lang.Double value) {
- validate(fields()[11], value);
- this.maybe_double_column = value;
- fieldSetFlags()[11] = true;
- return this;
- }
-
- /** Checks whether the 'maybe_double_column' field has been set */
- public boolean hasMaybeDoubleColumn() {
- return fieldSetFlags()[11];
- }
-
- /** Clears the value of the 'maybe_double_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearMaybeDoubleColumn() {
- maybe_double_column = null;
- fieldSetFlags()[11] = false;
- return this;
- }
-
- /** Gets the value of the 'maybe_binary_column' field */
- public java.nio.ByteBuffer getMaybeBinaryColumn() {
- return maybe_binary_column;
- }
-
- /** Sets the value of the 'maybe_binary_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setMaybeBinaryColumn(java.nio.ByteBuffer value) {
- validate(fields()[12], value);
- this.maybe_binary_column = value;
- fieldSetFlags()[12] = true;
- return this;
- }
-
- /** Checks whether the 'maybe_binary_column' field has been set */
- public boolean hasMaybeBinaryColumn() {
- return fieldSetFlags()[12];
- }
-
- /** Clears the value of the 'maybe_binary_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearMaybeBinaryColumn() {
- maybe_binary_column = null;
- fieldSetFlags()[12] = false;
- return this;
- }
-
- /** Gets the value of the 'maybe_string_column' field */
- public java.lang.String getMaybeStringColumn() {
- return maybe_string_column;
- }
-
- /** Sets the value of the 'maybe_string_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setMaybeStringColumn(java.lang.String value) {
- validate(fields()[13], value);
- this.maybe_string_column = value;
- fieldSetFlags()[13] = true;
- return this;
- }
-
- /** Checks whether the 'maybe_string_column' field has been set */
- public boolean hasMaybeStringColumn() {
- return fieldSetFlags()[13];
- }
-
- /** Clears the value of the 'maybe_string_column' field */
- public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearMaybeStringColumn() {
- maybe_string_column = null;
- fieldSetFlags()[13] = false;
- return this;
}
/** Gets the value of the 'strings_column' field */
@@ -903,21 +166,21 @@ public class ParquetAvroCompat extends org.apache.avro.specific.SpecificRecordBa
/** Sets the value of the 'strings_column' field */
public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setStringsColumn(java.util.List<java.lang.String> value) {
- validate(fields()[14], value);
+ validate(fields()[0], value);
this.strings_column = value;
- fieldSetFlags()[14] = true;
+ fieldSetFlags()[0] = true;
return this;
}
/** Checks whether the 'strings_column' field has been set */
public boolean hasStringsColumn() {
- return fieldSetFlags()[14];
+ return fieldSetFlags()[0];
}
/** Clears the value of the 'strings_column' field */
public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearStringsColumn() {
strings_column = null;
- fieldSetFlags()[14] = false;
+ fieldSetFlags()[0] = false;
return this;
}
@@ -928,21 +191,21 @@ public class ParquetAvroCompat extends org.apache.avro.specific.SpecificRecordBa
/** Sets the value of the 'string_to_int_column' field */
public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setStringToIntColumn(java.util.Map<java.lang.String,java.lang.Integer> value) {
- validate(fields()[15], value);
+ validate(fields()[1], value);
this.string_to_int_column = value;
- fieldSetFlags()[15] = true;
+ fieldSetFlags()[1] = true;
return this;
}
/** Checks whether the 'string_to_int_column' field has been set */
public boolean hasStringToIntColumn() {
- return fieldSetFlags()[15];
+ return fieldSetFlags()[1];
}
/** Clears the value of the 'string_to_int_column' field */
public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearStringToIntColumn() {
string_to_int_column = null;
- fieldSetFlags()[15] = false;
+ fieldSetFlags()[1] = false;
return this;
}
@@ -953,21 +216,21 @@ public class ParquetAvroCompat extends org.apache.avro.specific.SpecificRecordBa
/** Sets the value of the 'complex_column' field */
public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder setComplexColumn(java.util.Map<java.lang.String,java.util.List<org.apache.spark.sql.execution.datasources.parquet.test.avro.Nested>> value) {
- validate(fields()[16], value);
+ validate(fields()[2], value);
this.complex_column = value;
- fieldSetFlags()[16] = true;
+ fieldSetFlags()[2] = true;
return this;
}
/** Checks whether the 'complex_column' field has been set */
public boolean hasComplexColumn() {
- return fieldSetFlags()[16];
+ return fieldSetFlags()[2];
}
/** Clears the value of the 'complex_column' field */
public org.apache.spark.sql.execution.datasources.parquet.test.avro.ParquetAvroCompat.Builder clearComplexColumn() {
complex_column = null;
- fieldSetFlags()[16] = false;
+ fieldSetFlags()[2] = false;
return this;
}
@@ -975,23 +238,9 @@ public class ParquetAvroCompat extends org.apache.avro.specific.SpecificRecordBa
public ParquetAvroCompat build() {
try {
ParquetAvroCompat record = new ParquetAvroCompat();
- record.bool_column = fieldSetFlags()[0] ? this.bool_column : (java.lang.Boolean) defaultValue(fields()[0]);
- record.int_column = fieldSetFlags()[1] ? this.int_column : (java.lang.Integer) defaultValue(fields()[1]);
- record.long_column = fieldSetFlags()[2] ? this.long_column : (java.lang.Long) defaultValue(fields()[2]);
- record.float_column = fieldSetFlags()[3] ? this.float_column : (java.lang.Float) defaultValue(fields()[3]);
- record.double_column = fieldSetFlags()[4] ? this.double_column : (java.lang.Double) defaultValue(fields()[4]);
- record.binary_column = fieldSetFlags()[5] ? this.binary_column : (java.nio.ByteBuffer) defaultValue(fields()[5]);
- record.string_column = fieldSetFlags()[6] ? this.string_column : (java.lang.String) defaultValue(fields()[6]);
- record.maybe_bool_column = fieldSetFlags()[7] ? this.maybe_bool_column : (java.lang.Boolean) defaultValue(fields()[7]);
- record.maybe_int_column = fieldSetFlags()[8] ? this.maybe_int_column : (java.lang.Integer) defaultValue(fields()[8]);
- record.maybe_long_column = fieldSetFlags()[9] ? this.maybe_long_column : (java.lang.Long) defaultValue(fields()[9]);
- record.maybe_float_column = fieldSetFlags()[10] ? this.maybe_float_column : (java.lang.Float) defaultValue(fields()[10]);
- record.maybe_double_column = fieldSetFlags()[11] ? this.maybe_double_column : (java.lang.Double) defaultValue(fields()[11]);
- record.maybe_binary_column = fieldSetFlags()[12] ? this.maybe_binary_column : (java.nio.ByteBuffer) defaultValue(fields()[12]);
- record.maybe_string_column = fieldSetFlags()[13] ? this.maybe_string_column : (java.lang.String) defaultValue(fields()[13]);
- record.strings_column = fieldSetFlags()[14] ? this.strings_column : (java.util.List<java.lang.String>) defaultValue(fields()[14]);
- record.string_to_int_column = fieldSetFlags()[15] ? this.string_to_int_column : (java.util.Map<java.lang.String,java.lang.Integer>) defaultValue(fields()[15]);
- record.complex_column = fieldSetFlags()[16] ? this.complex_column : (java.util.Map<java.lang.String,java.util.List<org.apache.spark.sql.execution.datasources.parquet.test.avro.Nested>>) defaultValue(fields()[16]);
+ record.strings_column = fieldSetFlags()[0] ? this.strings_column : (java.util.List<java.lang.String>) defaultValue(fields()[0]);
+ record.string_to_int_column = fieldSetFlags()[1] ? this.string_to_int_column : (java.util.Map<java.lang.String,java.lang.Integer>) defaultValue(fields()[1]);
+ record.complex_column = fieldSetFlags()[2] ? this.complex_column : (java.util.Map<java.lang.String,java.util.List<org.apache.spark.sql.execution.datasources.parquet.test.avro.Nested>>) defaultValue(fields()[2]);
return record;
} catch (Exception e) {
throw new org.apache.avro.AvroRuntimeException(e);
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetAvroCompatibilitySuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetAvroCompatibilitySuite.scala
index 82d40e2b61..45db619567 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetAvroCompatibilitySuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetAvroCompatibilitySuite.scala
@@ -20,7 +20,8 @@ package org.apache.spark.sql.execution.datasources.parquet
import java.nio.ByteBuffer
import java.util.{List => JList, Map => JMap}
-import scala.collection.JavaConversions._
+import scala.collection.JavaConverters.seqAsJavaListConverter
+import scala.collection.JavaConverters.mapAsJavaMapConverter
import org.apache.avro.Schema
import org.apache.avro.generic.IndexedRecord
@@ -32,48 +33,196 @@ import org.apache.spark.sql.execution.datasources.parquet.test.avro._
import org.apache.spark.sql.test.SharedSQLContext
class ParquetAvroCompatibilitySuite extends ParquetCompatibilityTest with SharedSQLContext {
- import ParquetCompatibilityTest._
-
private def withWriter[T <: IndexedRecord]
(path: String, schema: Schema)
(f: AvroParquetWriter[T] => Unit): Unit = {
+ logInfo(
+ s"""Writing Avro records with the following Avro schema into Parquet file:
+ |
+ |${schema.toString(true)}
+ """.stripMargin)
+
val writer = new AvroParquetWriter[T](new Path(path), schema)
try f(writer) finally writer.close()
}
- test("Read Parquet file generated by parquet-avro") {
+ test("required primitives") {
withTempPath { dir =>
val path = dir.getCanonicalPath
- withWriter[ParquetAvroCompat](path, ParquetAvroCompat.getClassSchema) { writer =>
- (0 until 10).foreach(i => writer.write(makeParquetAvroCompat(i)))
+ withWriter[AvroPrimitives](path, AvroPrimitives.getClassSchema) { writer =>
+ (0 until 10).foreach { i =>
+ writer.write(
+ AvroPrimitives.newBuilder()
+ .setBoolColumn(i % 2 == 0)
+ .setIntColumn(i)
+ .setLongColumn(i.toLong * 10)
+ .setFloatColumn(i.toFloat + 0.1f)
+ .setDoubleColumn(i.toDouble + 0.2d)
+ .setBinaryColumn(ByteBuffer.wrap(s"val_$i".getBytes("UTF-8")))
+ .setStringColumn(s"val_$i")
+ .build())
+ }
}
- logInfo(
- s"""Schema of the Parquet file written by parquet-avro:
- |${readParquetSchema(path)}
- """.stripMargin)
+ logParquetSchema(path)
checkAnswer(sqlContext.read.parquet(path), (0 until 10).map { i =>
- def nullable[T <: AnyRef]: ( => T) => T = makeNullable[T](i)
-
Row(
i % 2 == 0,
i,
i.toLong * 10,
i.toFloat + 0.1f,
i.toDouble + 0.2d,
- s"val_$i".getBytes,
- s"val_$i",
+ s"val_$i".getBytes("UTF-8"),
+ s"val_$i")
+ })
+ }
+ }
+
+ test("optional primitives") {
+ withTempPath { dir =>
+ val path = dir.getCanonicalPath
+
+ withWriter[AvroOptionalPrimitives](path, AvroOptionalPrimitives.getClassSchema) { writer =>
+ (0 until 10).foreach { i =>
+ val record = if (i % 3 == 0) {
+ AvroOptionalPrimitives.newBuilder()
+ .setMaybeBoolColumn(null)
+ .setMaybeIntColumn(null)
+ .setMaybeLongColumn(null)
+ .setMaybeFloatColumn(null)
+ .setMaybeDoubleColumn(null)
+ .setMaybeBinaryColumn(null)
+ .setMaybeStringColumn(null)
+ .build()
+ } else {
+ AvroOptionalPrimitives.newBuilder()
+ .setMaybeBoolColumn(i % 2 == 0)
+ .setMaybeIntColumn(i)
+ .setMaybeLongColumn(i.toLong * 10)
+ .setMaybeFloatColumn(i.toFloat + 0.1f)
+ .setMaybeDoubleColumn(i.toDouble + 0.2d)
+ .setMaybeBinaryColumn(ByteBuffer.wrap(s"val_$i".getBytes("UTF-8")))
+ .setMaybeStringColumn(s"val_$i")
+ .build()
+ }
+
+ writer.write(record)
+ }
+ }
+
+ logParquetSchema(path)
+
+ checkAnswer(sqlContext.read.parquet(path), (0 until 10).map { i =>
+ if (i % 3 == 0) {
+ Row.apply(Seq.fill(7)(null): _*)
+ } else {
+ Row(
+ i % 2 == 0,
+ i,
+ i.toLong * 10,
+ i.toFloat + 0.1f,
+ i.toDouble + 0.2d,
+ s"val_$i".getBytes("UTF-8"),
+ s"val_$i")
+ }
+ })
+ }
+ }
+
+ test("non-nullable arrays") {
+ withTempPath { dir =>
+ val path = dir.getCanonicalPath
+
+ withWriter[AvroNonNullableArrays](path, AvroNonNullableArrays.getClassSchema) { writer =>
+ (0 until 10).foreach { i =>
+ val record = {
+ val builder =
+ AvroNonNullableArrays.newBuilder()
+ .setStringsColumn(Seq.tabulate(3)(i => s"val_$i").asJava)
+
+ if (i % 3 == 0) {
+ builder.setMaybeIntsColumn(null).build()
+ } else {
+ builder.setMaybeIntsColumn(Seq.tabulate(3)(Int.box).asJava).build()
+ }
+ }
+
+ writer.write(record)
+ }
+ }
+
+ logParquetSchema(path)
+
+ checkAnswer(sqlContext.read.parquet(path), (0 until 10).map { i =>
+ Row(
+ Seq.tabulate(3)(i => s"val_$i"),
+ if (i % 3 == 0) null else Seq.tabulate(3)(identity))
+ })
+ }
+ }
+
+ ignore("nullable arrays (parquet-avro 1.7.0 does not properly support this)") {
+ // TODO Complete this test case after upgrading to parquet-mr 1.8+
+ }
+
+ test("SPARK-10136 array of primitive array") {
+ withTempPath { dir =>
+ val path = dir.getCanonicalPath
+
+ withWriter[AvroArrayOfArray](path, AvroArrayOfArray.getClassSchema) { writer =>
+ (0 until 10).foreach { i =>
+ writer.write(AvroArrayOfArray.newBuilder()
+ .setIntArraysColumn(
+ Seq.tabulate(3, 3)((i, j) => i * 3 + j: Integer).map(_.asJava).asJava)
+ .build())
+ }
+ }
- nullable(i % 2 == 0: java.lang.Boolean),
- nullable(i: Integer),
- nullable(i.toLong: java.lang.Long),
- nullable(i.toFloat + 0.1f: java.lang.Float),
- nullable(i.toDouble + 0.2d: java.lang.Double),
- nullable(s"val_$i".getBytes),
- nullable(s"val_$i"),
+ logParquetSchema(path)
+ checkAnswer(sqlContext.read.parquet(path), (0 until 10).map { i =>
+ Row(Seq.tabulate(3, 3)((i, j) => i * 3 + j))
+ })
+ }
+ }
+
+ test("map of primitive array") {
+ withTempPath { dir =>
+ val path = dir.getCanonicalPath
+
+ withWriter[AvroMapOfArray](path, AvroMapOfArray.getClassSchema) { writer =>
+ (0 until 10).foreach { i =>
+ writer.write(AvroMapOfArray.newBuilder()
+ .setStringToIntsColumn(
+ Seq.tabulate(3) { i =>
+ i.toString -> Seq.tabulate(3)(j => i + j: Integer).asJava
+ }.toMap.asJava)
+ .build())
+ }
+ }
+
+ logParquetSchema(path)
+
+ checkAnswer(sqlContext.read.parquet(path), (0 until 10).map { i =>
+ Row(Seq.tabulate(3)(i => i.toString -> Seq.tabulate(3)(j => i + j)).toMap)
+ })
+ }
+ }
+
+ test("various complex types") {
+ withTempPath { dir =>
+ val path = dir.getCanonicalPath
+
+ withWriter[ParquetAvroCompat](path, ParquetAvroCompat.getClassSchema) { writer =>
+ (0 until 10).foreach(i => writer.write(makeParquetAvroCompat(i)))
+ }
+
+ logParquetSchema(path)
+
+ checkAnswer(sqlContext.read.parquet(path), (0 until 10).map { i =>
+ Row(
Seq.tabulate(3)(n => s"arr_${i + n}"),
Seq.tabulate(3)(n => n.toString -> (i + n: Integer)).toMap,
Seq.tabulate(3) { n =>
@@ -86,47 +235,27 @@ class ParquetAvroCompatibilitySuite extends ParquetCompatibilityTest with Shared
}
def makeParquetAvroCompat(i: Int): ParquetAvroCompat = {
- def nullable[T <: AnyRef] = makeNullable[T](i) _
-
def makeComplexColumn(i: Int): JMap[String, JList[Nested]] = {
- mapAsJavaMap(Seq.tabulate(3) { n =>
- (i + n).toString -> seqAsJavaList(Seq.tabulate(3) { m =>
+ Seq.tabulate(3) { n =>
+ (i + n).toString -> Seq.tabulate(3) { m =>
Nested
.newBuilder()
- .setNestedIntsColumn(seqAsJavaList(Seq.tabulate(3)(j => i + j + m)))
+ .setNestedIntsColumn(Seq.tabulate(3)(j => i + j + m: Integer).asJava)
.setNestedStringColumn(s"val_${i + m}")
.build()
- })
- }.toMap)
+ }.asJava
+ }.toMap.asJava
}
ParquetAvroCompat
.newBuilder()
- .setBoolColumn(i % 2 == 0)
- .setIntColumn(i)
- .setLongColumn(i.toLong * 10)
- .setFloatColumn(i.toFloat + 0.1f)
- .setDoubleColumn(i.toDouble + 0.2d)
- .setBinaryColumn(ByteBuffer.wrap(s"val_$i".getBytes))
- .setStringColumn(s"val_$i")
-
- .setMaybeBoolColumn(nullable(i % 2 == 0: java.lang.Boolean))
- .setMaybeIntColumn(nullable(i: Integer))
- .setMaybeLongColumn(nullable(i.toLong: java.lang.Long))
- .setMaybeFloatColumn(nullable(i.toFloat + 0.1f: java.lang.Float))
- .setMaybeDoubleColumn(nullable(i.toDouble + 0.2d: java.lang.Double))
- .setMaybeBinaryColumn(nullable(ByteBuffer.wrap(s"val_$i".getBytes)))
- .setMaybeStringColumn(nullable(s"val_$i"))
-
- .setStringsColumn(Seq.tabulate(3)(n => s"arr_${i + n}"))
- .setStringToIntColumn(
- mapAsJavaMap(Seq.tabulate(3)(n => n.toString -> (i + n: Integer)).toMap))
+ .setStringsColumn(Seq.tabulate(3)(n => s"arr_${i + n}").asJava)
+ .setStringToIntColumn(Seq.tabulate(3)(n => n.toString -> (i + n: Integer)).toMap.asJava)
.setComplexColumn(makeComplexColumn(i))
-
.build()
}
- test("SPARK-9407 Don't push down predicates involving Parquet ENUM columns") {
+ test("SPARK-9407 Push down predicates involving Parquet ENUM columns") {
import testImplicits._
withTempPath { dir =>
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetCompatibilityTest.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetCompatibilityTest.scala
index b3406729fc..d85c564e3e 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetCompatibilityTest.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetCompatibilityTest.scala
@@ -43,6 +43,13 @@ private[sql] abstract class ParquetCompatibilityTest extends QueryTest with Parq
val footers = ParquetFileReader.readAllFootersInParallel(configuration, parquetFiles, true)
footers.head.getParquetMetadata.getFileMetaData.getSchema
}
+
+ protected def logParquetSchema(path: String): Unit = {
+ logInfo(
+ s"""Schema of the Parquet file written by parquet-avro:
+ |${readParquetSchema(path)}
+ """.stripMargin)
+ }
}
object ParquetCompatibilityTest {