我有一个Parquet文件(由Drill创建),我试图在Hive中读取外部表格。数据类型一对一复制(即INTEGER - > INT,BIGINT - > BIGINT,DOUBLE - > DOUBLE,TIMESTAMP - > TIMESTAMP,CHARACTER VARYING - > STRING)。没有复杂的类型。
Drill查询它创建的文件没有问题,但是Hive不喜欢它:
CREATE EXTERNAL TABLE my_table
(
<col> <data_type>
)
STORED AS PARQUET
LOCATION '<hdfs_location>';
我可以执行SELECT COUNT(*) FROM my_table
并获得正确的行数,但当我要求第一行时,它会说:
Error: java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassCastException: org.apache.hadoop.io.IntWritable cannot be cast to org.apache.hadoop.io.LongWritable (state=,code=0)
我不确定为什么它会抱怨,因为我使用整数和大整数,我认为没有一个存储为长整数。而且,我认为整数可以转换为long。有没有已知的解决方法?
答案 0 :(得分:1)
这只是因为你的数据。 我也面临同样的问题。 我的int和I格式的数据创建了外部表作为String。 在hive create语句中提供适当的数据类型。
答案 1 :(得分:0)
Hive不支持某些数据类型,例如 long -使用 bigint
这是两步解决方案:
首先,放下桌子
Drop TABLE if exists <TableName>
第二次,重新创建表,这次使用'bigint'而不是'long'
Create external TABLE <TableName>
(
<col> bigint
)
Stored as Parquet
Location '<hdfs_location>';