蜂巢:提取数据时出错

时间:2018-08-03 17:12:25

标签: hadoop hive

我尝试使用以下查询连接到Hive:

"tasks": [ { "type": "typescript", "tsconfig": "tsconfig.json", "problemMatcher": [ "$tsc" ], "options": { "shell": { "executable": "cmd.exe", "args": [ "/d", "/c" ] } } } ]

查询成功运行。

再添加一个过滤器,即select * from some-table where yyyy = 2018 and mm = 01 and dd = 05 runs

生成以下错误:

  

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

1 个答案:

答案 0 :(得分:0)

该错误是由Serializer-Deserializers生成的。

根本原因:创建表时,您可能未定义 STORED AS 标记。尝试使用 desc <table name> 描述您的表格,您可能会看到类似这样的内容:

| # 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 |

这不是很好的做法。默认情况下,您的SerDes使用惰性评估。使用 STORED AS 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 |

尝试一下,您也许可以解决问题。