Создайте Spark StructType/Schema из класса case

Если бы я хотел создать StructType (т.е. a DataFrame.schema) из case class, есть ли способ сделать это, не создавая DataFrame? Я легко могу сделать:

case class TestCase(id: Long)
val schema = Seq[TestCase]().toDF.schema

Но, кажется, слишком сложно создать DataFrame, когда все, что я хочу, это схема.

(Если вам интересно, причина в том, что я определяю UserDefinedAggregateFunction, и для этого вы переопределяете пару методов, возвращающих StructTypes, и я использую классы case.)

Ответ 1

Вы можете сделать это так же SQLContext.createDataFrame:

import org.apache.spark.sql.catalyst.ScalaReflection
val schema = ScalaReflection.schemaFor[TestCase].dataType.asInstanceOf[StructType]

Ответ 2

Я знаю, что этот вопрос почти год, но я наткнулся на него и подумал, что другим, которые тоже могут захотеть узнать, что я только что научился использовать этот подход:

import org.apache.spark.sql.Encoders
val mySchema = Encoders.product[MyCaseClass].schema

Ответ 3

если кто-то захочет сделать это для пользовательской Java bean:

ExpressionEncoder.javaBean(Event.class).schema().json()