如何从Map [String,Any]创建数据框并推断其架构?

时间:2018-07-27 12:56:32

标签: scala apache-spark dataframe apache-spark-sql dataset

基本上,我希望能够隐式推断Map[String, Any]的结构和Any的数据类型。如回答here一样,可以从现有Map创建数据框。问题在于它将模式设置为key, value。我想这个想法类似于从JSON字符串及其数据类型推断模式。

让我们看一个例子。为了简化,让我们假设我想从Map[String, Int]创建数据框(以避免使用Any类型)。

spark
    .createDataset(Seq(Map("foo" -> 0, "bar" -> 1)))(ExpressionEncoder(): Encoder[Map[String, Int]])
    .printSchema

我得到以下模式:

root
 |-- value: map (nullable = true)
 |    |-- key: string
 |    |-- value: integer (valueContainsNull = false)

但是,我想自动推断模式,就像Spark推断JSON字符串的模式一样:

root
 |-- foo: integer (nullable = true)
 |-- bar: integer (nullable = true) 

有什么方法可以创建编码器或“ 推断器”来实现这一目标?

谢谢。

0 个答案:

没有答案