하는 방법은 없을 지정 유형은 스칼라에서 동적으로

0

질문

나는 새로운에서 스파크,스칼라,정말 미안해 바보 같 질문입니다. 그래서 나는 숫자의 테이블:

되므로 성능이 향상되,table_b,...

와 숫자의 해당 형식을 위한 이러한 테이블

케이스 클래스 classa 를(...),경우 클래스는 기본(...),...

그런 다음 필요를 작성하는 방법에서 읽은 데이터 이 테이블을 만들고 데이터 집합:

def getDataFromSource: Dataset[classA] = {
       val df: DataFrame = spark.sql("SELECT * FROM table_a")
       df.as[classA]
}

에 대해 동일한 기타 테이블과 형식입니다. 방법은 없을 피하는 일상적인 코드-내 말은 개별 fucntion 에 대한 각각의 테이블에 하나? 예를 들어:

def getDataFromSource[T: Encoder](table_name: String): Dataset[T] = {
       val df: DataFrame = spark.sql(s"SELECT * FROM $table_name")
       df.as[T]
}

다음의 목록을 작성 쌍(table_name,type_name):

val tableTypePairs = List(("table_a", classA), ("table_b", classB), ...)

그런 다음 전화를 사용하여 foreach:

tableTypePairs.foreach(tupl => getDataFromSource[what should I put here?](tupl._1))

사전에 감사합니다!

apache-spark scala
2021-11-23 21:17:33
2

최고의 응답

2

다음과 같이 작업

def getDataFromSource[T](table_name: String, encoder: Encoder[T]): Dataset[T] =
  spark.sql(s"SELECT * FROM $table_name").as(encoder)

val tableTypePairs = List(
  "table_a" -> implicitly[Encoder[classA]],
  "table_b" -> implicitly[Encoder[classB]]
)

tableTypePairs.foreach {
  case (table, enc) =>
    getDataFromSource(table, enc)
}

이 경우의 폐기 값의 비트 코드 냄새가 있다. 이 Encoder 고정, tableTypePairs 하지 않는 유리의 유형과도 같은 것

tableTypePairs.map {
  case (table, enc) =>
    getDataFromSource(table, enc)
}
2021-11-23 22:09:20
0

옵션 중 하나를 통과하는 Class 하는 방법,이 방법으로 일반 유형 T 추됩니다:

def getDataFromSource[T: Encoder](table_name: String, clazz: Class[T]): Dataset[T] = {
       val df: DataFrame = spark.sql(s"SELECT * FROM $table_name")
       df.as[T]
}

tableTypePairs.foreach { case (table name, clazz) => getDataFromSource(tableName, clazz) }

그러나 나는 확실하지 않는 방법의할 수 있을 악용하는 이 목록 Dataset.asInstanceOf.

2021-11-23 22:02:48

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................