我有一个类似的功能:
def createDataset[T](seq:Seq[T]): Dataset[T] = {
import spark.implicits._
seq.toDS()
}
这没有编译,没有找到toDS功能。
它也不以这种方式工作
def createDataset[T](t:T): Dataset[T] = {
import spark.implicits._
Seq(t).toDS()
}
我正在使用的案例类是
case class Person(id: Long, name: String, age: Int) {}
case class Address(a_id:Long, street:String, number: Int) {}
拥有泛型函数可以做什么,该函数在给定T泛型类(始终为案例类)的情况下创建数据集?
修改:
Terry Dactyl提供的解决方案不适用于我,并且在调用 f 函数时显示此错误
import org.apache.spark.sql.{Dataset, Encoder, SparkSession}
def f[T <: Product : Encoder](s: Seq[T]): Dataset[T] = {
val spark = SparkSession.builder.getOrCreate()
import spark.implicits._
s.toDF.as[T]
}
f(Seq(
Person(1, "John", 25)
Person(2, "Paul", 22)
))
未找到参数ev $ 1的隐式变量:Encoder [Person]
答案 0 :(得分:1)
import org.apache.spark.sql._
import spark.implicits._
def f[T <: Product : Encoder](s: Seq[T]): Dataset[T] = {
s.toDF.as[T]
}
case class C(a: Int, b: Int)
f(Seq(C(1, 2), C(3, 4), C(5, 6)))
res0: org.apache.spark.sql.Dataset[C] = [a: int, b: int]