开发者社区> 问答> 正文

Spark数据帧Timestamp列从Mapr DB表中推断为InvalidType

我用Spark从MapR DB读表。但是timestamp列被推断为InvalidType。从Mapr db读取数据时,也没有设置模式的选项。

root
|-- Name: string (nullable = true)
|-- dt: struct (nullable = true)
| |-- InvalidType: string (nullable = true)
我试图将列转换为时间戳,但得到了以下异常。

val df = spark.loadFromMapRDB("path")
df.withColumn("dt1", $"dt" ("InvalidType").cast(TimestampType))
.drop("dt")
df.show(5, false)
com.mapr.db.spark.exceptions.SchemaMappingException:无法在com.mapr的com.mapr.db.spark.sql.utils.MapRSqlUtils $ .convertField(MapRSqlUtils.scala:250)中为列{dt}推断出模式。位于com.mapr.db的com.mapr.db.spark.sql.utils.MapRSqlUtils $ .convertRootField(MapRSqlUtils.scala:48)中的.db.spark.sql.utils.MapRSqlUtils $ .convertObject(MapRSqlUtils.scala:64) .spark.sql.utils.MapRSqlUtils $$ anonfun $ documentsToRow $ 1.apply(MapRSqlUtils.scala:34)at com.mapr.db.spark.sql.utils.MapRSqlUtils $$ anonfun $ documentsToRow $ 1.apply(MapRSqlUtils.scala: 33)scala.collection.Iterator $$ anon $ 12.nextCur(Iterator.scala:434)at scala.collection.Iterator $$ anon $ 12.hasNext(Iterator.scala:440)at scala.collection.Iterator $$ anon $ 11 .hasNext(Iterator.scala:408)在org.apache.spark.sql。sales.expressions.GeneratedClass $ GeneratedIterator.processNext(Unknown Source)org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)at org.apache.spark.sql.execution.WholeStageCodegenExec $$ anonfun $ 8位于org.apache.spark.sql.exe.SparkPlan的org.apache.spark.sql.execution.SparkPlan $$ anonfun $ 2.apply(SparkPlan.scala:234)的$$ anon $ 1.hasNext(WholeStageCodegenExec.scala:395) $$ anonfun $ 2.apply(SparkPlan.scala:228)at org.apache.spark.rdd.RDD $$ anonfun $ mapPartitionsInternal $ 1 $$ anonfun $ apply $ 25.apply(RDD.scala:827)at org.apache.spark .rdd.RDD $$ anonfun $ mapPartitionsInternal $ 1 $$ anonfun $ apply $ 25.apply(RDD.scala:827)org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)org.apache.spark .rdd.RDD。位于org.apache的org.apache.spark.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)org.apache.spark.rdd.RDD.iterator(RDD.scala:287)的computeOrReadCheckpoint(RDD.scala:323) .spark.scheduler.Task.run(Task.scala:108)at org.apache.spark.executor.Executor $ TaskRunner.run(Executor.scala:338)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java) :1149)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)上运行(Executor.scala:338)java.lang.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)java.lang.Thread .RUN(Thread.java:748)运行(Executor.scala:338)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)java.lang.Thread .RUN(Thread.java:748)

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

    如果您知道表的架构。您可以创建自己的case类来定义表的模式,然后使用此case类加载表。

    浏览此链接从MapR数据库加载数据作为Apache Spark数据集

    如果该特定列具有有效的模式,还要检查MapRDB中的表

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

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载