Spark SQL从Hive Orc分区表读取,给出数组超出范围的异常

时间:2019-02-27 14:36:45

标签: pyspark apache-spark-sql

我在Hive中创建了带有分区的ORC表,数据使用ORC格式的Apache Pig在HDFS中加载。然后,在此之上创建Hive表。分区列是年,月和日。当我尝试使用spark sql读取该表时,出现数组超出绑定异常。请在下面找到代码和错误消息。

代码:

myTable = spark.table("testDB.employee")
myTable.count()

错误:

  

错误执行程序:阶段10.0中的任务8.0中的异常(TID 66)   java.lang.IndexOutOfBoundsException:toIndex = 47

此表中的数据类型为字符串,时间戳和双精度型。当我尝试使用带有Spark sql查询的select语句选择所有列时,出现如下所示的类强制转换异常。

  

py4j.protocol.Py4JJavaError:调用时发生错误   o536.showString。 :org.apache.spark.SparkException:作业因以下原因中止   阶段失败:阶段12.0中的任务0失败1次,最近一次   失败:在阶段12.0中丢失任务0.0(TID 84,localhost,执行程序)   驱动程序):java.lang.ClassCastException:org.apache.hadoop.io.Text   无法转换为org.apache.hadoop.hive.serde2.io.TimestampWritable

在此之后,我尝试使用下面给出的代码段将其转换为时间戳。但是在那之后,我也将数组移出了绑定异常。

df2 = df.select('dt',unix_timestamp('dt', "yyyy-MM-dd HH:mm:ss") .cast(TimestampType()).alias("timestamp"))

1 个答案:

答案 0 :(得分:0)

如果不指定分区过滤器,则可能导致此问题。在我这一边,当我指定过滤器之间的日期时,它将解决此超出范围的异常。