Apache spark 从Mapr DB表推断为InvalidType的Spark dataframe时间戳列
我正在用Spark从MapR DB读取表格。但是timestamp列被推断为InvalidType。从Mapr db读取数据时,也没有设置模式的选项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
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中的表,看该特定列是否具有有效的模式