Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何从存储的(变量或参数)序列创建数据集_Scala_Apache Spark_Generics_Apache Spark Dataset - Fatal编程技术网

Scala 如何从存储的(变量或参数)序列创建数据集

Scala 如何从存储的(变量或参数)序列创建数据集,scala,apache-spark,generics,apache-spark-dataset,Scala,Apache Spark,Generics,Apache Spark Dataset,我有一个类似于: 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类是 case class Pe

我有一个类似于:

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类是

case class Person(id: Long, name: String, age: Int) {}
case class Address(a_id:Long, street:String, number: Int) {}
我能做些什么来使用generic函数创建一个给定T generic类的数据集,T generic类始终是case类

编辑

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)
))
import org.apache.spark.sql.{Dataset,Encoder,SparkSession}
def[T
import org.apache.spark.sql_
导入spark.implicits_

def f[T未找到参数ev$1:Encoder[MyType]的隐式含义您是否可以编辑您的原始帖子以添加失败的示例或至少提供MyType的定义?您对“失败的示例”是什么意思?我正在使用的案例类?所有真实代码?因此,至少要有一个案例类的定义。理想情况下是一个自包含的程序。您没有正确使用解决方案。在函数内创建会话并在其闭包中引入隐式
Encoder
不会带来
Encoder[t]
在外部范围内。必须在答案中提供隐含信息(在闭包之外)。
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]