Я новичок в 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")
Есть ли лучший способ добиться этого?
implicit val
в области действия, или (2) путем определенияimplicit class
, или (3) путем явной передачи аргумента misingEncoder
во вторичном списке аргументов. - person Robin Green   schedule 06.11.2018No implicit arguments of Type: Encoder[Person]
в строкеdef data:Dataset[Person](location) = readCsv[Person](location)
- person Harshad_Pardeshi   schedule 06.11.2018