Я пытаюсь использовать Неявный класс для упрощения загрузки данных в таблицу улья (с помощью Spark)
Скажем, например: Если это мои данные,
case class Name(name: String, age: Int)
val lst = List(Name("name1", 24), Name("name2", 25))
Я хочу загрузить данные в таблицу следующим образом lst.loadToTable(db = "somedb", table = "sometable")
Вот что я сделал до сих пор, чтобы достичь вышеуказанного ^ используя Implicit class
,
object TableHelper {
implicit class TableUtil[X: ClassTag](lst: Seq[X]){
def loadToTable(db: String, table: String)(implicit spark: SparkSession): Unit ={
println("Table -> " + table)
spark.catalog.tableExists(s"${db}.${table}") match {
case true =>
println(s"Table exist. Not creating new one: $table")
case false =>
println(s"Table DO NOT exist. Creating new one: $table")
// Create database
val ddl = s"CREATE DATABASE IF NOT EXISTS ${db}"
println("ddl -> " + ddl)
spark.sql(ddl)
// Create DataFrame
import spark.implicits._
val df = spark.sparkContext.parallelize(lst).toDF() // Compiler ERROR
// TODO: Pending: Create table & Load data
}
}
}
}
Проблема Я получаю эту ошибку компилятора,
Error:(27, 66) value toDF is not a member of org.apache.spark.rdd.RDD[X]
val df = spark.sparkContext.parallelize(lst).toDF()
Кажется, проблема в том, что toDF()
не работает при использовании типа generi c (где в моем коде lst
равно Seq[X]
). Любая идея, что нужно сделать, чтобы исправить эту проблему?