Skip to content

Commit 0be79f0

Browse files
author
Itamar Ravid
committed
Use PartiallyConstructedTypedColumn for functions.col
1 parent 897e499 commit 0be79f0

File tree

3 files changed

+20
-10
lines changed

3 files changed

+20
-10
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package frameless
2+
package functions
3+
4+
import org.apache.spark.sql.functions.{ col => sparkCol }
5+
import shapeless.Witness
6+
7+
case class PartiallyConstructedTypedColumn[K <: Symbol](column: Witness.Aux[K])
8+
object PartiallyConstructedTypedColumn {
9+
implicit def toTypedColumn[T, K <: Symbol, A](p: PartiallyConstructedTypedColumn[K])(
10+
implicit
11+
exists: TypedColumn.Exists[T, K, A],
12+
encoder: TypedEncoder[A]): TypedColumn[T, A] = {
13+
val untypedExpr = sparkCol(p.column.value.name).as[A](TypedExpressionEncoder[A])
14+
new TypedColumn[T, A](untypedExpr)
15+
}
16+
}

dataset/src/main/scala/frameless/functions/package.scala

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package frameless
22

33
import org.apache.spark.sql.catalyst.ScalaReflection
44
import org.apache.spark.sql.catalyst.expressions.Literal
5-
import org.apache.spark.sql.functions.{ col => sparkCol }
65
import shapeless.Witness
76

87
package object functions extends Udf with UnaryFunctions {
@@ -20,11 +19,5 @@ package object functions extends Udf with UnaryFunctions {
2019
}
2120
}
2221

23-
def col[T, A](column: Witness.Lt[Symbol])(
24-
implicit
25-
exists: TypedColumn.Exists[T, column.T, A],
26-
encoder: TypedEncoder[A]): TypedColumn[T, A] = {
27-
val untypedExpr = sparkCol(column.value.name).as[A](TypedExpressionEncoder[A])
28-
new TypedColumn[T, A](untypedExpr)
29-
}
22+
def col[K <: Symbol](column: Witness.Aux[K]): PartiallyConstructedTypedColumn[K] = PartiallyConstructedTypedColumn(column)
3023
}

dataset/src/test/scala/frameless/SelectTests.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ class SelectTests extends TypedDatasetSuite {
1616
): Prop = {
1717
val dataset = TypedDataset.create(data)
1818
val A = dataset.col[A]('a)
19+
val col = functions.col('a)
1920

2021
val dataset2 = dataset.select(A).collect().run().toVector
21-
val symDataset2 = dataset.select(functions.col('a)).collect().run().toVector
22+
val symDataset2 = dataset.select(col).collect().run().toVector
2223
val data2 = data.map { case X4(a, _, _, _) => a }
2324

2425
(dataset2 ?= data2) && (symDataset2 ?= data2)
@@ -398,4 +399,4 @@ class SelectTests extends TypedDatasetSuite {
398399
val e = TypedDataset.create[(Int, String, Long)]((1, "a", 2L) :: (2, "b", 4L) :: (2, "b", 1L) :: Nil)
399400
illTyped("""e.select(frameless.functions.aggregate.sum(e('_1)))""")
400401
}
401-
}
402+
}

0 commit comments

Comments
 (0)