查看: 5|回复: 0

Hive查询报错:java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.io.LongWritable

[复制链接]

1

主题

0

回帖

0

积分

积极分子

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2010-4-9
发表于 2025-11-11 19:23:00 | 显示全部楼层 |阅读模式

 

以下只是说一下解决思路  供大家参考

以下基于hive的内部表

 

Error: java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.io.LongWritable (state=,code=0)

 

这个是因为hdfs的存的文件和hive元数据的建表语句对应的字段类型不一样,hdfs文件是字符串类型,但是hive的表字段是数值类型 转换报错了

首先判断一下是哪个字段转换的问题,这个大家自行比较 ,有一个简单的办法就是单独查询每一个字段,

比如 select  字段 from 表;   单独查询一个字段是不会报异常的 如果报了 说明就是那个字段有问题

 

这个时候我们试过把hive对应的字段的数值类型直接转换成字符串类型(我们试过 但是这种方法即使把hive的字段改为字符串类型了 查询也还是不行 

ALTER TABLE table_name 
CHANGE COLUMN old_column_name new_column_name STRING;

 

 

这种数值转字符串类型hive是支持直接转换了但是比如字符串转数值类型 就不行

 

最后做法

新建一个字段类型符合hdfs要求的hive表

CREATE TABLE `ddm.op_111102`(
  `d_ip` string COMMENT 'dev_ip', 
  `p_user` string COMMENT 'primary_user')
PARTITIONED BY ( 
  `month` string, 
  `date` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  'hdfs://apps/op'

以上就是一个简单的建表语句 根据自己的来就行

最主要的就是要把外部表的Location设置为之前对应表有问题的hdfs路径,同时把字段改为符合要求的类型

 

然后刷新所有分区  

MSCK REPAIR TABLE ddm.op_111102;

刷新某个分区

 ALTER TABLE op_111102 ADD PARTITION (month=202511, date='08');

以上是为了加载查询数据 

 

这样先查询下创建的表是否能够查询刷新分区的数据

select * from 表 ;

这个主要验证是否可以查询到数据,如果可以的话 那说明基本可以了

 

剩下的就是把表名重命名下就可以了 把原本有问题的表名换一个,然后这种可以用的表名 重命名为原来的表名即可 (如果需要的话,注意 内部表这个步骤会导致hdfs的目录 也就是location的变更 数据和迁移

ALTER TABLE db.old_name RENAME TO db.new_name;

只有外部表重命名才不会导致location的变更

也就是 EXTERNAL

CREATE EXTERNAL TABLE external_table (id INT)
LOCATION '/data/source/from/spark/or/flink';

 

改成外部表

ALTER TABLE ass.op SET TBLPROPERTIES('EXTERNAL'='TRUE');

 

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部