Pyspark-Mongo错过了一些田地

时间:2018-03-23 21:22:59

标签: python mongodb pyspark

所以我试图使用mongo-spark连接器将MongoDB中的集合形式读入spark,但是docuemnts中的某些字段丢失了,有没有人以前遇到过这个问题?如果是,解决方案是什么?

以下命令用于阅读MongoDB集合:

orders = spark.read.format("com.mongodb.spark.sql.DefaultSource") \
        .option("uri" , "mongodb://127.0.0.1/company.orders") \
        .load()
orders.select('missing_field').limit(10).collect()

示例文件: a)示例文档 -

{
    "_id" : "0000-10001",
    "_updated" : ISODate("2016-02-03T22:47:47.000Z"),
    "total" : 64.96,
    "subtotal" : 64.96,
    "user_email" : “abc@gmail.com"
}

我可以阅读除user_email

之外的所有字段

2 个答案:

答案 0 :(得分:1)

  

但文档中的某些字段缺失

默认情况下,MongoDB Connector for Spark从基础集合中的一组文档randomly sampled推断出关系模式。听起来像'缺失'字段user_email在MongoDB中通常是NULL,导致Spark连接器无法为其创建数据类型映射。

但是,您可以手动声明架构,而不是使用基于自动采样的架构映射。对于Python Spark API,您可以使用以下示例声明架构:

schema = StructType([StructField("user_email", StringType(), True), 
                     StructField("total", StringType(), True])
dataframe = rdd.toDF(schema)
dataframe = sqlContext.createDataFrame(rdd, schema)

答案 1 :(得分:0)

我更新了spark-mongo连接器,它解决了问题。