Skip to content

Commit 70f7280

Browse files
committed
Add limit
1 parent ee7fca3 commit 70f7280

File tree

4 files changed

+26
-0
lines changed

4 files changed

+26
-0
lines changed

Sources/SparkConnect/DataFrame.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,4 +197,9 @@ public actor DataFrame: Sendable {
197197
let plan = SparkConnectClient.getProject(self.plan.root, cols)
198198
return DataFrame(spark: self.spark, plan: plan)
199199
}
200+
201+
public func limit(_ n: Int32) -> DataFrame {
202+
let plan = SparkConnectClient.getLimit(self.plan.root, n)
203+
return DataFrame(spark: self.spark, plan: plan)
204+
}
200205
}

Sources/SparkConnect/SparkConnectClient.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,4 +268,15 @@ public actor SparkConnectClient {
268268
plan.opType = .root(relation)
269269
return plan
270270
}
271+
272+
static func getLimit(_ child: Relation, _ n: Int32) -> Plan {
273+
var limit = Limit()
274+
limit.input = child
275+
limit.limit = n
276+
var relation = Relation()
277+
relation.limit = limit
278+
var plan = Plan()
279+
plan.opType = .root(relation)
280+
return plan
281+
}
271282
}

Sources/SparkConnect/TypeAliases.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ typealias ExecutePlanRequest = Spark_Connect_ExecutePlanRequest
2424
typealias Plan = Spark_Connect_Plan
2525
typealias Project = Spark_Connect_Project
2626
typealias KeyValue = Spark_Connect_KeyValue
27+
typealias Limit = Spark_Connect_Limit
2728
typealias Range = Spark_Connect_Range
2829
typealias Relation = Spark_Connect_Relation
2930
typealias SparkConnectService = Spark_Connect_SparkConnectService

Tests/SparkConnectTests/DataFrameTests.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,15 @@ struct DataFrameTests {
107107
await spark.stop()
108108
}
109109

110+
@Test
111+
func limit() async throws {
112+
let spark = try await SparkSession.builder.getOrCreate()
113+
#expect(try await spark.range(10).limit(0).count() == 0)
114+
#expect(try await spark.range(10).limit(1).count() == 1)
115+
#expect(try await spark.range(10).limit(2).count() == 2)
116+
await spark.stop()
117+
}
118+
110119
@Test
111120
func table() async throws {
112121
let spark = try await SparkSession.builder.getOrCreate()

0 commit comments

Comments
 (0)