-Spark Scala Mongodb- MongoTypeConversionException 无法将 STRING 转换为 StructType(...)

Posted

技术标签:

【中文标题】-Spark Scala Mongodb- MongoTypeConversionException 无法将 STRING 转换为 StructType(...)【英文标题】:-Spark Scala Mongodb- MongoTypeConversionException Cannot cast STRING into a StructType(...) 【发布时间】:2021-07-27 11:44:35 【问题描述】:

非常感谢任何帮助。

我正在尝试使用来自 mongodb 的数据构建数据框。

val spark = SparkSession.builder()
      .master("local")
      .appName("app")
      .config("spark.mongodb.input.uri", uri)
      .config("spark.mongodb.input.collection", "collectionName")
      .config("spark.mongodb.input.readPreference.name", "secondary")
      .getOrCreate()

val df = MongoSpark.load(spark).limit(1)

从那里我尝试逐行读取元素,数据框的架构看起来像这样:

root
 |-- A: struct (nullable = true)
 |    |-- oid: string (nullable = true)
 |-- B: boolean (nullable = true)
 |-- C: string (nullable = true)
 |-- D: string (nullable = true)
 |-- E: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- a: string (nullable = true)
 |    |    |-- b: string (nullable = true)
 |    |    |-- c: string (nullable = true)
 |    |    |-- d: string (nullable = true)

如果数据框不包含 E,dataframe.show() 会打印出来就好了。

但是,如果数据框确实包含 E,那么 dataframe.show() 会给我

Cannot cast STRING into a StructType(StructField(a,StringType,true), StructField(b,StringType,true), StructField(c,StringType,true), StructField(d,StringType,true)) (value: BsonStringvalue='http://...some url...')

我几乎尝试了 *** 上列出的与此问题相关的所有解决方案,但我仍然无法通过此错误。

我应该如何解决这个问题?谢谢!

【问题讨论】:

您能添加一个包含 E 的 mongodb 文档示例吗?看起来 E 实际上是一个字符串数组,而不是一个字符串结构数组。 @VincentDoba 我贴了下面mongodb文档示例的截图。 【参考方案1】:

E实际上是一个包含多个字符串的对象数组。

example of mongodb document

【讨论】:

以上是关于-Spark Scala Mongodb- MongoTypeConversionException 无法将 STRING 转换为 StructType(...)的主要内容,如果未能解决你的问题,请参考以下文章

Scala对MongoDB的增删改查操作

MongoDB Scala - 删除集合中的重复文档

如何使用 Scala 将 1 亿条记录加载到 MongoDB 中进行性能测试?

为啥 $nin 比 $in 慢,Mon​​godb

Scala与Mongodb实践4-----action的具体使用选择出现的属性排序等相关的指令

SDP:MongoDB-Scala - data access and modeling