我是Scala的新手,我正在尝试构建一个框架,该框架可以读取多种类型的csv文件,并且所有读取操作将通过一个类。例如,我有两种类型的CSV:Student
和Professor
,而我正在做类似的事情。
abstract class Person
case class Student(name: String, major: String, marks: Double) extends Person
case class Professor(name: String, salary: Double) extends Person
我的csv阅读器看起来像这样
private def readCsv[T: Encoder](location: String) = {
spark
.read
.option("header", "true")
.option("inferSchema", "true")
.option("delimiter", ";")
.csv(location)
.as[T]
}
def data:Dataset[Person](location) = readCsv[Person](location)
我在最后一行收到No implicit arguments of Type: Encoder[Person]
的编译时错误。对该方法的调用如下所示:
val studentData = storage.data[Student]("Student.csv")
有没有更好的方法来实现这一目标?
答案 0 :(得分:2)
Encoders
。 Either[A, B]
表示为(Option[A], Option[B])
,但是的,这很痛苦