Skip to content

Commit a2b3b67

Browse files
michalsenkyrcloud-fan
authored andcommitted
[SPARK-19089][SQL] Add support for nested sequences
## What changes were proposed in this pull request? Replaced specific sequence encoders with generic sequence encoder to enable nesting of sequences. Does not add support for nested arrays as that cannot be solved in this way. ## How was this patch tested? ```bash build/mvn -DskipTests clean package && dev/run-tests ``` Additionally in Spark shell: ``` scala> Seq(Seq(Seq(1))).toDS.collect() res0: Array[Seq[Seq[Int]]] = Array(List(List(1))) ``` Author: Michal Senkyr <mike.senkyr@gmail.com> Closes apache#18011 from michalsenkyr/dataset-seq-nested.
1 parent 833c8d4 commit a2b3b67

File tree

2 files changed

+16
-44
lines changed

2 files changed

+16
-44
lines changed

sql/core/src/main/scala/org/apache/spark/sql/SQLImplicits.scala

Lines changed: 11 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -111,93 +111,60 @@ abstract class SQLImplicits extends LowPrioritySQLImplicits {
111111

112112
/**
113113
* @since 1.6.1
114-
* @deprecated use [[newIntSequenceEncoder]]
114+
* @deprecated use [[newSequenceEncoder]]
115115
*/
116116
def newIntSeqEncoder: Encoder[Seq[Int]] = ExpressionEncoder()
117117

118118
/**
119119
* @since 1.6.1
120-
* @deprecated use [[newLongSequenceEncoder]]
120+
* @deprecated use [[newSequenceEncoder]]
121121
*/
122122
def newLongSeqEncoder: Encoder[Seq[Long]] = ExpressionEncoder()
123123

124124
/**
125125
* @since 1.6.1
126-
* @deprecated use [[newDoubleSequenceEncoder]]
126+
* @deprecated use [[newSequenceEncoder]]
127127
*/
128128
def newDoubleSeqEncoder: Encoder[Seq[Double]] = ExpressionEncoder()
129129

130130
/**
131131
* @since 1.6.1
132-
* @deprecated use [[newFloatSequenceEncoder]]
132+
* @deprecated use [[newSequenceEncoder]]
133133
*/
134134
def newFloatSeqEncoder: Encoder[Seq[Float]] = ExpressionEncoder()
135135

136136
/**
137137
* @since 1.6.1
138-
* @deprecated use [[newByteSequenceEncoder]]
138+
* @deprecated use [[newSequenceEncoder]]
139139
*/
140140
def newByteSeqEncoder: Encoder[Seq[Byte]] = ExpressionEncoder()
141141

142142
/**
143143
* @since 1.6.1
144-
* @deprecated use [[newShortSequenceEncoder]]
144+
* @deprecated use [[newSequenceEncoder]]
145145
*/
146146
def newShortSeqEncoder: Encoder[Seq[Short]] = ExpressionEncoder()
147147

148148
/**
149149
* @since 1.6.1
150-
* @deprecated use [[newBooleanSequenceEncoder]]
150+
* @deprecated use [[newSequenceEncoder]]
151151
*/
152152
def newBooleanSeqEncoder: Encoder[Seq[Boolean]] = ExpressionEncoder()
153153

154154
/**
155155
* @since 1.6.1
156-
* @deprecated use [[newStringSequenceEncoder]]
156+
* @deprecated use [[newSequenceEncoder]]
157157
*/
158158
def newStringSeqEncoder: Encoder[Seq[String]] = ExpressionEncoder()
159159

160160
/**
161161
* @since 1.6.1
162-
* @deprecated use [[newProductSequenceEncoder]]
162+
* @deprecated use [[newSequenceEncoder]]
163163
*/
164-
implicit def newProductSeqEncoder[A <: Product : TypeTag]: Encoder[Seq[A]] = ExpressionEncoder()
164+
def newProductSeqEncoder[A <: Product : TypeTag]: Encoder[Seq[A]] = ExpressionEncoder()
165165

166166
/** @since 2.2.0 */
167-
implicit def newIntSequenceEncoder[T <: Seq[Int] : TypeTag]: Encoder[T] =
168-
ExpressionEncoder()
169-
170-
/** @since 2.2.0 */
171-
implicit def newLongSequenceEncoder[T <: Seq[Long] : TypeTag]: Encoder[T] =
172-
ExpressionEncoder()
173-
174-
/** @since 2.2.0 */
175-
implicit def newDoubleSequenceEncoder[T <: Seq[Double] : TypeTag]: Encoder[T] =
176-
ExpressionEncoder()
177-
178-
/** @since 2.2.0 */
179-
implicit def newFloatSequenceEncoder[T <: Seq[Float] : TypeTag]: Encoder[T] =
180-
ExpressionEncoder()
181-
182-
/** @since 2.2.0 */
183-
implicit def newByteSequenceEncoder[T <: Seq[Byte] : TypeTag]: Encoder[T] =
184-
ExpressionEncoder()
185-
186-
/** @since 2.2.0 */
187-
implicit def newShortSequenceEncoder[T <: Seq[Short] : TypeTag]: Encoder[T] =
188-
ExpressionEncoder()
189-
190-
/** @since 2.2.0 */
191-
implicit def newBooleanSequenceEncoder[T <: Seq[Boolean] : TypeTag]: Encoder[T] =
192-
ExpressionEncoder()
193-
194-
/** @since 2.2.0 */
195-
implicit def newStringSequenceEncoder[T <: Seq[String] : TypeTag]: Encoder[T] =
196-
ExpressionEncoder()
197-
198-
/** @since 2.2.0 */
199-
implicit def newProductSequenceEncoder[T <: Seq[Product] : TypeTag]: Encoder[T] =
200-
ExpressionEncoder()
167+
implicit def newSequenceEncoder[T <: Seq[_] : TypeTag]: Encoder[T] = ExpressionEncoder()
201168

202169
// Arrays
203170

sql/core/src/test/scala/org/apache/spark/sql/DatasetPrimitiveSuite.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,11 @@ class DatasetPrimitiveSuite extends QueryTest with SharedSQLContext {
258258
ListClass(List(1)) -> Queue("test" -> SeqClass(Seq(2))))
259259
}
260260

261+
test("nested sequences") {
262+
checkDataset(Seq(Seq(Seq(1))).toDS(), Seq(Seq(1)))
263+
checkDataset(Seq(List(Queue(1))).toDS(), List(Queue(1)))
264+
}
265+
261266
test("package objects") {
262267
import packageobject._
263268
checkDataset(Seq(PackageClass(1)).toDS(), PackageClass(1))

0 commit comments

Comments
 (0)