如果我想在case class
之外创建一个StructType
(即DataFrame.schema
),有没有一种不创建DataFrame
的方法?我可以很容易地做到:
case class TestCase(id: Long)
val schema = Seq[TestCase]().toDF.schema
但是,当我所需要的只是模式时,实际创建DataFrame
似乎有些过分了。
(如果您很好奇,这个问题背后的原因是我定义了一个UserDefinedAggregateFunction
,为此,您将覆盖几个返回StructTypes
和我的用例类的方法。)
发布于 2016-04-20 22:03:23
您可以使用与SQLContext.createDataFrame
相同的方式完成此操作:
import org.apache.spark.sql.catalyst.ScalaReflection
val schema = ScalaReflection.schemaFor[TestCase].dataType.asInstanceOf[StructType]
发布于 2017-03-18 06:43:42
我知道这个问题已经有将近一年的历史了,但我偶然发现了这个问题,并认为其他人可能也想知道我刚刚学会了使用这种方法:
import org.apache.spark.sql.Encoders
val mySchema = Encoders.product[MyCaseClass].schema
发布于 2017-03-28 16:32:45
如果有人想要对自定义Java bean执行此操作:
ExpressionEncoder.javaBean(Event.class).schema().json()
https://stackoverflow.com/questions/36746055
复制相似问题