-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 将 1 亿条记录加载到 MongoDB 中进行性能测试?