Столбец метки времени Spark dataframe, выведенный по состоянию на InvalidType из таблицы БД Mapr - PullRequest
0 голосов
/ 28 ноября 2018

Я читал таблицу из БД MapR со Spark.Но столбец отметки времени выводится как InvalidType.При чтении данных из базы данных Mapr также невозможно задать схему.

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: невозможно получить схему для столбца {dt} в com.mapr.db.spark.sql.utils.MapRSqlUtils $ .convertField (MapRSqlUtils.scala: 250) вcom.mapr.db.spark.sql.utils.MapRSqlUtils $ .convertObject (MapRSqlUtils.scala: 64) по адресу com.mapr.db.spark.sql.utils.MapRSqlUtils $ .convertRootField (MapRSqlUtils.scala: 48) по адресу com.mapr.db.spark.sql.utils.MapRSqlUtils $$ anonfun $ documentsToRow $ 1.apply (MapRSqlUtils.scala: 34) в com.mapr.db.spark.sql.utils.MapRSqlUtils $$ anonfun $ documentsToRow $ 1.l.scala: 33) в scala.collection.Iterator $$ anon $ 12.nextCur (Iterator.scala: 434) в scala.collection.Iterator $$ anon $ 12.hasNext (Iterator.scala: 440) в scala.collection.Iterator $$ anon $ 11.hasNext (Iterator.scala: 408) в org.apache.spark.sql.catalyst.expressions.GeneratedClass $ GeneratedIterator.processNext (Неизвестный источник) в org.apache.spark.sql.execution.BufferedRowIterator.hasNext (BufferedRowIterator.java:43) в org.apache.spark.sql.execution.WholeStageCodegenExec $$ anonfun $ 8 $ далее(WholeStageCodegenExec.scala: 395) в org.apache.spark.sql.execution.SparkPlan $$ anonfun $ 2.apply (SparkPlan.scala: 234) в org.apache.spark.sql.execution.SparkPlan $$ anonfun $ 2.apply(SparkPlan.scala: 228) в org.apache.spark.rdd.RDD $$ anonfun $ mapPartitionsInternal $ 1 $$ anonfun $ apply $ 25.apply (RDD.scala: 827) в 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.computehereRead(RDD.scala: 323) в org.apache.spark.rdd.RDD.iterator (RDD.scala: 287) в org.apache.spark.scheduler.ResultTask.runTask (ResultTask.scala: 87) в org.apache.spark.scheduler.Task.run (Task.scala: 108) в org.apache.spark.executor.Executor $ TaskRunner.run (Executor.scala: 338) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624) в java.rung..java: 748)

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 28 ноября 2018

Если вы знаете схему таблицы.Вы можете создать свой собственный класс дел, определяющий схему таблицы, а затем загрузить таблицу, используя этот класс дел.

Перейти по этой ссылке Загрузка данных из базы данных MapR в виде набора данных Apache Spark

А также проверьте таблицу в MapRDB, имеет ли данный столбец правильную схему или нет

...