我正在尝试从MongoDB读取一个庞大的复杂文档到spark数据框架中。当我将这个数据库转换成json时,它就能工作了。但是,如果我直接从com.mongodb.spark.exceptions.MongoTypeConversionException:中读取,则会得到以下错误:由: MongoDB引起的不能将字符串转换为DoubleType (value: BsonString{value='NaN'})
能够读取到DF并完成所有的处理。当我试图显示或写入json/csv时会出错。
mongo$.main(mongo.scala:270) - df.show()
将sbt用于依赖型芒果火花连接器: 2.2.1 Scala版本: 2.11.6火花版本: 2.3.0/2.2.0
发布于 2018-04-19 23:34:39
正如错误描述的那样,这是因为"NaN"的字符串值在schema中被推断为Double类型。
在所有的文档中,有一个字段的值不是双倍的。例如:
{_id:1, foo: 100.00}
{_id:2, foo: 101.00}
{_id:3, foo: 102.00}
{_id:4, foo: 103.00}
...
{_id:99, foo: "NaN"}
{_id:100, foo: 200.00}正如你可能知道的,"NaN“的意思是”不是一个数字“。在文档创建过程中,无论哪一个进程未能插入Double,并且默认进入NaN,都很可能会出现这种情况。
根据用例的不同,解决这个问题的方法不多:
{foo: "NaN"},并使用所需的值(即0 )进行更新。发布于 2019-01-25 13:23:28
我也有类似的转换问题。Mongodb以1000个文档为样本来定义该方案。就我而言,1000份文件不足以涵盖所有案件。我增加了样本量,这解决了问题。蒙戈文献
代码:
val readConfig = ReadConfig(Map(
"database" -> "myDatabase",
"collection" -> "myCollection",
"sampleSize" -> "100000"), Some(ReadConfig(sc)))
val df = sc.loadFromMongoDB(readConfig).toDF()https://stackoverflow.com/questions/49637792
复制相似问题