Я столкнулся со специфической проблемой при работе со свечой, я не совсем уверен, что происходит, было бы здорово, если кто-то может помочь. Моя проблема в том, чтобы иметь функцию, аналогичную приведенной ниже, которая преобразует кадры данных в наборы данных некоторого типа, что решается во время выполнения. Мне нужно работать с наборами данных, потому что базовые классы дел имеют некоторые аннотации, которые я хотел бы использовать.
def ret(spark: SparkSession, dss: DataFrame, typ: String): Dataset[_ <: Product] = {
import spark.implicits._
typ match {
case "t1" => dss.as[T1]
case "t2" => dss.as[T2]
}
}
Я могу привести кадр данных к набору данных с помощью следующего вызова функции val ds = ret(spark,dataframe,"t1")
Все работает хорошо с этой функцией, теперь я хочу расширить существующую функцию, чтобы вернуть Dataset[(String,_<:Product)]
, поэтому я изменяю свою функцию следующим образом:
def ret(spark: SparkSession, dss: DataFrame,typ: String):Dataset[(String,_ <: Product)] = {
import spark.implicits._
typ match {
case "t1" => dss.as[(String,T1)]
case "t2" => dss.as[(String,T2)]
}
}
Это дает мне ошибку компиляции, говоря:тип (String,T1)
, не соответствует ожидаемому типу (String,_<:Product)
. Что на самом деле здесь происходит? Есть идеи, как я могу это исправить? Любые советы будут высоко оценены!
Спасибо большое!
Обновление: Верхняя граница <: Продукт относится к scala.Product и T1, T2 могут быть любыми классами случаев, например, </p>
case class T1(name: String, age: Int)
case class T2(name: String, max: Int, min: Int)
Но это может бытьдействительно что-нибудь