From 62de6780523dc762f181c1697440fe645c74893b Mon Sep 17 00:00:00 2001 From: Josh Rosen Date: Wed, 9 Oct 2019 13:23:05 -0700 Subject: [PATCH] [SPARK-29419] For thread-safety, copy encoder in SparkSession.createDataset(Seq) --- .../src/main/scala/org/apache/spark/sql/SparkSession.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/core/src/main/scala/org/apache/spark/sql/SparkSession.scala b/sql/core/src/main/scala/org/apache/spark/sql/SparkSession.scala index bd2bc1c0ad5d..70d5bbc89b21 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/SparkSession.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/SparkSession.scala @@ -461,7 +461,8 @@ class SparkSession private( * @since 2.0.0 */ def createDataset[T : Encoder](data: Seq[T]): Dataset[T] = { - val enc = encoderFor[T] + // `ExpressionEncoder` is not thread-safe, here we create a new encoder. + val enc = encoderFor[T].copy() val attributes = enc.schema.toAttributes val encoded = data.map(d => enc.toRow(d).copy()) val plan = new LocalRelation(attributes, encoded)