开发者社区> 问答> 正文

MongoDB和Spark:无法将STRING转换为TimestampType

我正在使用官方MongoDB Spark Connector从MongoDB集合中读取Spark中的数据,其代码如下:

val spark = SparkSession.

        builder().
        appName("MongoDB to SQL").
        getOrCreate()

val df = MongoSpark.load(spark, readConfig)
df.count()
readConfig是MongoDB的标准读配置,它工作正常。我遇到的问题是我从MongoDB获得一些日期/时间为String,它无法将其转换为Spark类型TimestampValue:

INFO DAGScheduler: Job 1 failed: count at transfer.scala:159, took 3,138191 s
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 1.0 failed 1 times, most recent failure: Lost task 0.0 in stage 1.0 (TID 1, localhost, executor driver):
com.mongodb.spark.exceptions.MongoTypeConversionException: Cannot cast STRING into a TimestampType (value: BsonString{value='2999.12.31 14:09:34'})
at com.mongodb.spark.sql.MapFunctions$.com$mongodb$spark$sql$MapFunctions$$convertToDataType(MapFunctions.scala:200)
at com.mongodb.spark.sql.MapFunctions$$anonfun$3.apply(MapFunctions.scala:39)
at com.mongodb.spark.sql.MapFunctions$$anonfun$3.apply(MapFunctions.scala:37)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
从我在调用df.printSchema()之前看到的.count()有问题的属性被列为

| | | |-- endDate: string (nullable = true)
在MongoDB中,endDate也存储为String。Spark是否在此处执行额外步骤来检测架构?然后它没有投出它......?从https://github.com/mongodb/mongo-spark/blob/master/src/main/scala/com/mongodb/spark/sql/MapFunctions.scala#L181查看源代码,它只进行简单的映射,

使用的版本:Mongo-Scala-Driver 2.4.0,Mongo-Spark-Connector 2.3.0,Spark 2.3.1

展开
收起
社区小助手 2018-12-05 14:11:01 4853 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    你需要将日期作为字符串转换为时间戳(包括时区)使用unix_timestamp并将其转换为TimestampType

    可以尝试查看此示例:https: //docs.databricks.com/_static/notebooks/timestamp-conversion.html

    2019-07-17 23:18:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
开源数据库 MongoDB 专场 MongoDB疑难杂症分析及优化 立即下载
MongoDB多数据中心的方案选型之路 立即下载
饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的 立即下载