Apache spark 从Mapr DB表推断为InvalidType的Spark dataframe时间戳列

Apache spark 从Mapr DB表推断为InvalidType的Spark dataframe时间戳列,apache-spark,apache-spark-sql,mapr,Apache Spark,Apache Spark Sql,Mapr,我正在用Spark从MapR DB读取表格。但是timestamp列被推断为InvalidType。从Mapr db读取数据时,也没有设置模式的选项 root |-- Name: string (nullable = true) |-- dt: struct (nullable = true) | |-- InvalidType: string (nullable = true) 我试图将列强制转换为timestamp,但得到以下异常 val df = spark.loadFro

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

root
 |-- Name: string (nullable = true)
 |-- dt: struct (nullable = true)
 |    |-- InvalidType: string (nullable = true)
我试图将列强制转换为timestamp,但得到以下异常

 val df = spark.loadFromMapRDB("path")
df.withColumn("dt1", $"dt" ("InvalidType").cast(TimestampType))     
  .drop("dt")
df.show(5, false)
com.mapr.db.spark.exceptions.SchemaMappingException:无法创建架构 为列{dt}推断 位于com.mapr.db.spark.sql.utils.MapRSqlUtils$.convertFieldMapRSqlUtils.scala:250 位于com.mapr.db.spark.sql.utils.MapRSqlUtils$.convertObjectMapRSqlUtils.scala:64 位于com.mapr.db.spark.sql.utils.MapRSqlUtils$.convertRootFieldMapRSqlUtils.scala:48 位于com.mapr.db.spark.sql.utils.MapRSqlUtils$$anonfun$documentsToRow$1.applyMapRSqlUtils.scala:34 位于com.mapr.db.spark.sql.utils.MapRSqlUtils$$anonfun$documentsToRow$1.applyMapRSqlUtils.scala:33 在scala.collection.Iterator$$anon$12.nextCurIterator.scala:434 在scala.collection.Iterator$$anon$12.hasNextIterator.scala:440 在scala.collection.Iterator$$anon$11.hasNextIterator.scala:408 位于org.apache.spark.sql.catalyst.expressions.GeneratedClass$GenerateEditor.processNextUnknown 来源 位于org.apache.spark.sql.execution.BufferedRowIterator.hasNextBufferedRowIterator.java:43 位于org.apache.spark.sql.execution.whistagecodegenexec$$anonfun$8$$anon$1.hasNextWholeStageCodegenExec.scala:395 位于org.apache.spark.sql.execution.SparkPlan$$anonfun$2.applySparkPlan.scala:234 位于org.apache.spark.sql.execution.SparkPlan$$anonfun$2.applySparkPlan.scala:228 在org.apache.spark.rdd.rdd$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.applyRDD.scala:827 在org.apache.spark.rdd.rdd$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.applyRDD.scala:827 在org.apache.spark.rdd.MapPartitionsRDD.ComputeImpactionsRdd.scala:38 位于org.apache.spark.rdd.rdd.computeOrReadCheckpointRDD.scala:323 位于org.apache.spark.rdd.rdd.iteratorRDD.scala:287 位于org.apache.spark.scheduler.ResultTask.runtasksresulttask.scala:87 位于org.apache.spark.scheduler.Task.runTask.scala:108 位于org.apache.spark.executor.executor$TaskRunner.runExecutor.scala:338 位于java.util.concurrent.ThreadPoolExecutor.runWorkerThreadPoolExecutor.java:1149 位于java.util.concurrent.ThreadPoolExecutor$Worker.runThreadPoolExecutor.java:624 java:748


如果您知道表格的模式,我们将不胜感激。

。您可以创建自己的case类来定义表的模式,然后使用这个case类加载表

通过这个链接

并且还检查MapRDB中的表,看该特定列是否具有有效的模式