sparkR-Mongo 子文档的连接器查询
sparkR-Mongo connector query to subdocument
我正在使用 Mongo-Spark 连接器,文档 (https://docs.mongodb.com/spark-connector/sparkR/) 中的所有示例都很好,但是如果我在包含子文档的文档中测试查询失败,显然 SQL尚未准备好进行此查询:
result <- sql(sqlContext, "SELECT DOCUMENT.SUBDOCUMENT FROM TABLE")
错误:
com.mongodb.spark.exceptions.MongoTypeConversionException: Cannot cast INT32 into a ConflictType (value: BsonInt32{value=171609012})
at com.mongodb.spark.sql.MapFunctions$.com$mongodb$spark$sql$MapFunctions$$convertToDataType(MapFunctions.scala:79)
at com.mongodb.spark.sql.MapFunctions$$anonfun.apply(MapFunctions.scala:38)
at com.mongodb.spark.sql.MapFunctions$$anonfun.apply(MapFunctions.scala:36)
at scala.collection.TraversableLike$$anonfun$map.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map.apply(TraversableLike.scala:244)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:108)
at com.mongodb.spark.sql.MapFunctions$.documentToRow(MapFunctions.scala:36)
at com.mongodb.spark.sql.MapFunctions$.castToStructType(MapFunctions.scala:108)
at com.mongodb.spark.sql.MapFunctions$.com$mongodb$spark$sql$MapFunctions$$convertToDataType(MapFunctions.scala:74)
之前我注册了table如下:
registerTempTable(schema, "TABLE")
我想关键问题是如何将 mongo-子文档注册为 table。
有人有解决办法吗?
解决方案:所有字段必须遵循相同的类型,因此我有字段为 String 类型而其他字段为 Double 类型因此 table 已注册但无法处理。
我正在使用 Mongo-Spark 连接器,文档 (https://docs.mongodb.com/spark-connector/sparkR/) 中的所有示例都很好,但是如果我在包含子文档的文档中测试查询失败,显然 SQL尚未准备好进行此查询:
result <- sql(sqlContext, "SELECT DOCUMENT.SUBDOCUMENT FROM TABLE")
错误:
com.mongodb.spark.exceptions.MongoTypeConversionException: Cannot cast INT32 into a ConflictType (value: BsonInt32{value=171609012})
at com.mongodb.spark.sql.MapFunctions$.com$mongodb$spark$sql$MapFunctions$$convertToDataType(MapFunctions.scala:79)
at com.mongodb.spark.sql.MapFunctions$$anonfun.apply(MapFunctions.scala:38)
at com.mongodb.spark.sql.MapFunctions$$anonfun.apply(MapFunctions.scala:36)
at scala.collection.TraversableLike$$anonfun$map.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map.apply(TraversableLike.scala:244)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:108)
at com.mongodb.spark.sql.MapFunctions$.documentToRow(MapFunctions.scala:36)
at com.mongodb.spark.sql.MapFunctions$.castToStructType(MapFunctions.scala:108)
at com.mongodb.spark.sql.MapFunctions$.com$mongodb$spark$sql$MapFunctions$$convertToDataType(MapFunctions.scala:74)
之前我注册了table如下:
registerTempTable(schema, "TABLE")
我想关键问题是如何将 mongo-子文档注册为 table。
有人有解决办法吗?
解决方案:所有字段必须遵循相同的类型,因此我有字段为 String 类型而其他字段为 Double 类型因此 table 已注册但无法处理。