Я новичок в 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")
Есть ли лучший способ добиться этого?