Hadoop 配置单元:获取数据时出错

Hadoop 配置单元:获取数据时出错,hadoop,hive,Hadoop,Hive,我尝试使用以下查询连接到配置单元: 从yyyy=2018、mm=01和dd=05运行的表格中选择* 查询已成功运行 添加一个以上过滤器后,即字符串数据类型 生成以下错误: java.io.IOException:java.lang.ClassCastException: 无法将org.apache.hadoop.hive.serde2.io.DateWritable强制转换为 org.apache.hadoop.io.Text 该错误由序列化程序反序列化程序生成 根本原因:创建表时,可能没有定义

我尝试使用以下查询连接到配置单元:

从yyyy=2018、mm=01和dd=05运行的表格中选择*

查询已成功运行

添加一个以上过滤器后,即
字符串数据类型

生成以下错误:

java.io.IOException:java.lang.ClassCastException: 无法将org.apache.hadoop.hive.serde2.io.DateWritable强制转换为 org.apache.hadoop.io.Text


该错误由序列化程序反序列化程序生成

根本原因:创建表时,可能没有定义存储为标记的
。尝试使用描述描述表,您可能会看到如下内容:

| # Storage Information | NULL | NULL | 
| SerDe Library: | org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe | NULL | 
| InputFormat:   | org.apache.hadoop.hive.ql.io.orc.OrcInputFormat    | NULL | 
| OutputFormat:  | org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat   | NULL |
这不是好的做法。默认情况下,SERDE使用惰性计算。使用存储为ORC的
创建一个表,然后尝试描述您的表,这次结果可能不同:

| # Storage Information | NULL | NULL | 
| SerDe Library: | org.apache.hadoop.hive.ql.io.orc.OrcSerde        | NULL | 
| InputFormat:   | org.apache.hadoop.hive.ql.io.orc.OrcInputFormat  | NULL | 
| OutputFormat:  | org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat | NULL |

试试这个,您可能就能解决问题。

请阅读以下关于如何提问的链接:谢谢!让我试试这个。另外,我在您的回复中看到,表存储为ORC并进行描述后,输出看起来与ORC之前相同。只是想检查需要检查哪些属性,以确保表现在存储为ORC。还有,为什么仅在添加1个列筛选器时才会遇到此错误,并且在添加额外的列筛选器时不会给出错误列从筛选器中删除,如果这是表的存储属性的问题,那么它应该为我在原始问题中提到的缺陷语句提供相同的错误。这很奇怪。请注意突出显示的
desc表
value中的SerDe库输出差异。我给您一个向上投票,以便您将来可以提问。