heh*_*ehe 6 generics scala apache-spark
我想用这个代码来读取csv文件。但它会导致泛型错误。为什么?我想我被指定为“”这样的类型。
def readMoviesData[T](spark: SparkSession, dataPath: String): Dataset[T] = {
import spark.implicits._
spark.read.format("csv").schema(Encoders.product[T].schema)
.option("header","true").load(dataPath).as[T]
}
def analysisMovies(dataPath: String): Unit = {
val spark = SparkSession.builder().appName("analysis movies data").getOrCreate()
val movies: Dataset[MovieModel] = readMoviesData(spark, dataPath + "/movies.csv")
movies.createOrReplaceTempView("movies")
spark.sql("select count(*) from movies")
}
Run Code Online (Sandbox Code Playgroud)
错误
Error:(10, 53) type arguments [T] do not conform to method product's type parameter bounds [T <: Product]
spark.read.format("csv").schema(Encoders.product[T].schema)
Run Code Online (Sandbox Code Playgroud)
尝试添加Product : TypeTagT 边界并使用隐式编码器T:
import scala.reflect.runtime.universe.TypeTag
def readMoviesData[T <: Product : TypeTag](spark: SparkSession, dataPath: String): Dataset[T] = {
implicit val encoder: Encoder[T] = Encoders.product[T]
spark.read.format("csv").schema(encoder.schema)
.option("header","true").load(dataPath).as[T]
}
Run Code Online (Sandbox Code Playgroud)