From 78ee1f3176765892ac116a1e10a1316d9e960f0e Mon Sep 17 00:00:00 2001 From: Dongjoon Hyun Date: Fri, 9 May 2025 17:53:32 -0700 Subject: [PATCH] [SPARK-52063] Support `newSession` in `SparkSession` --- Sources/SparkConnect/SparkSession.swift | 7 +++++++ Tests/SparkConnectTests/SparkSessionTests.swift | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/Sources/SparkConnect/SparkSession.swift b/Sources/SparkConnect/SparkSession.swift index a3fcff9..e588ace 100644 --- a/Sources/SparkConnect/SparkSession.swift +++ b/Sources/SparkConnect/SparkSession.swift @@ -46,6 +46,13 @@ public actor SparkSession { /// The Spark version of Spark Connect Servier. This is supposed to be overwritten during establishing connections. public var version: String = "" + /// Start a new session with isolated SQL configurations, temporary tables, registered functions + /// are isolated, but sharing the underlying `SparkContext` and cached data. + /// - Returns: a new ``SparkSession`` instance. + public func newSession() async throws -> SparkSession { + return try await SparkSession.builder.create() + } + func setVersion(_ version: String) { self.version = version } diff --git a/Tests/SparkConnectTests/SparkSessionTests.swift b/Tests/SparkConnectTests/SparkSessionTests.swift index 9097e99..c2b5aa2 100644 --- a/Tests/SparkConnectTests/SparkSessionTests.swift +++ b/Tests/SparkConnectTests/SparkSessionTests.swift @@ -40,6 +40,16 @@ struct SparkSessionTests { await spark.stop() } + @Test + func newSession() async throws { + let spark = try await SparkSession.builder.getOrCreate() + await spark.stop() + let newSpark = try await spark.newSession() + #expect(newSpark != spark) + #expect(try await newSpark.range(1).count() == 1) + await newSpark.stop() + } + @Test func userContext() async throws { let spark = try await SparkSession.builder.getOrCreate() #if os(macOS) || os(Linux)