首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能显示/写从火花DF读取使用蒙戈火花连接器。

问不能显示/写从火花DF读取使用蒙戈火花连接器。
EN

Stack Overflow用户
提问于 2018-04-03 19:30:00
回答 2查看 1.1K关注 0票数 1

我正在尝试从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

EN

回答 2

Stack Overflow用户

发布于 2018-04-19 23:34:39

正如错误描述的那样,这是因为"NaN"的字符串值在schema中被推断为Double类型。

在所有的文档中,有一个字段的值不是双倍的。例如:

代码语言:javascript
复制
{_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,都很可能会出现这种情况。

根据用例的不同,解决这个问题的方法不多:

  • 使用MongoDB模式验证确保集合中的值在插入时具有预期的类型。
  • 执行转换以清理数据。查询集合以查找违规字段,即{foo: "NaN"},并使用所需的值(即0 )进行更新。
票数 0
EN

Stack Overflow用户

发布于 2019-01-25 13:23:28

我也有类似的转换问题。Mongodb以1000个文档为样本来定义该方案。就我而言,1000份文件不足以涵盖所有案件。我增加了样本量,这解决了问题。蒙戈文献

代码:

代码语言:javascript
复制
val readConfig = ReadConfig(Map(
  "database" -> "myDatabase",
  "collection" -> "myCollection",
  "sampleSize" -> "100000"), Some(ReadConfig(sc)))
val df = sc.loadFromMongoDB(readConfig).toDF()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49637792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档