mongo spark 大型集合的推断模式

Posted

技术标签:

【中文标题】mongo spark 大型集合的推断模式【英文标题】:mongo spark infer schema for large collections 【发布时间】:2017-02-14 19:16:15 【问题描述】:

我正在使用 mongo db spark 连接器 (mongo-spark-connector_2.10) 来读取 mongo 文档。我的问题是关于模式推断。

我看到 mongo spark 正在使用 MongoSinglePartitioner 来推断架构。因此,当我尝试对大集合(几百万个文档)进行采样以推断模式时,它非常慢。默认样本大小为 1000。mongo spark 是否有任何理由使用 SinglePartitioner 来推断架构而不是使用多个分区。我想从集合中读取所有字段,因此我从集合中抽取大量记录以推断模式。现在,对于 100 万条记录,模式推断需要 20 分钟。

有什么方法可以指定不同的分区器来推断模式以加速模式推断?或者 是否有任何其他方法可以从 mongo 推断大型集合的架构。

【问题讨论】:

【参考方案1】:

是否有任何其他方法可以从 mongo 推断大集合的模式。

一般来说,如果您有一个大型集合要加载并且已经知道架构,您会想要显式定义架构。

您可以使用简单的案例类来定义架构,防止额外的查询并加快加载过程。 例如:

case class Creature(name: String, strength: Int, type: String)

val explicitDF = MongoSpark.load[Creature](sparkSession)()
explicitDF.printSchema()

【讨论】:

以上是关于mongo spark 大型集合的推断模式的主要内容,如果未能解决你的问题,请参考以下文章

使用 databrics spark API 推断 xml 处理的模式选项

Spark 结构化流:Scala 中的模式推理

spark 大型项目实战:用户访问session分析 --单例模式

spark 大型项目实战:用户访问session分析 --单例模式

自定义数据源的自动火花模式推断

pyspark.sql.utils.AnalysisException:u'无法推断Parquet的模式。必须手动指定。