我在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"))
答案 0 :(得分:0)
如果不指定分区过滤器,则可能导致此问题。在我这一边,当我指定过滤器之间的日期时,它将解决此超出范围的异常。