apache-spark - Spark 无法读取具有不同版本架构的数据文件的 Hive ORC 表
问题描述
我有一个如下创建的配置单元 ORC 分区表。
create table default.tab_xyz (
wid String,
update_at timestamp,
type String,
id long)
PARTITIONED BY (
minorversion string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
现在分区下有2.1和2.2两个版本。当我从版本文件中获取架构时,如下所示。
* 2.1 版本架构 *
wid : String,
type: String,
update_at : timestamp
* 2.2 版本架构 *
wid : String,
update_at : timestamp,
type: String,
id : long
当我执行
select * from default.tab_xyz
in hive 时,它工作正常。
但是当我这样做时,
spark.sql("select * from default.tab_xyz")
它会抛出错误
java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.orc.mapred.OrcTimestamp
,因为对于 2.1 版本的文件,它会将列映射
type
到表中的
update_at
列。
即使架构不同,是否仍然在 spark 中处理它以获取所有数据。
解决方案
推荐阅读
- python - 如何使用纸浆在 python 中不显示任何消息 model.solve()?
- javascript - 处理ajax错误并执行promise链
- laravel - 类型错误:this.axios 未定义
- javascript - 如何使用文件流将两个或多个图像存储在服务器文件夹中
- python - 从 API 端点请求时找不到路径
- amazon-web-services - Route 53 cloudflare 流量管理器
- c - C - C 文件不会正确计数,它是 1 短
- javascript - javascript中的迭代只返回第一个元素
- android - 在另一个类的一个活动中更改“AutoCompleteTextView”的值
- php - PHP - 无法回显变量 $error 和 $successMessage