所以我试图使用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
之外的所有字段答案 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连接器,它解决了问题。