Ответ 1
Вы можете сделать это так же SQLContext.createDataFrame
:
import org.apache.spark.sql.catalyst.ScalaReflection
val schema = ScalaReflection.schemaFor[TestCase].dataType.asInstanceOf[StructType]
Если бы я хотел создать StructType
(т.е. a DataFrame.schema
) из case class
, есть ли способ сделать это, не создавая DataFrame
? Я легко могу сделать:
case class TestCase(id: Long)
val schema = Seq[TestCase]().toDF.schema
Но, кажется, слишком сложно создать DataFrame
, когда все, что я хочу, это схема.
(Если вам интересно, причина в том, что я определяю UserDefinedAggregateFunction
, и для этого вы переопределяете пару методов, возвращающих StructTypes
, и я использую классы case.)
Вы можете сделать это так же SQLContext.createDataFrame
:
import org.apache.spark.sql.catalyst.ScalaReflection
val schema = ScalaReflection.schemaFor[TestCase].dataType.asInstanceOf[StructType]
Я знаю, что этот вопрос почти год, но я наткнулся на него и подумал, что другим, которые тоже могут захотеть узнать, что я только что научился использовать этот подход:
import org.apache.spark.sql.Encoders
val mySchema = Encoders.product[MyCaseClass].schema
если кто-то захочет сделать это для пользовательской Java bean:
ExpressionEncoder.javaBean(Event.class).schema().json()