问题解决: Spark无法读取有多个子目录的Parquet表

当使用Tez处理数据并用union all整合时,会产生多个子目录导致Spark无法读取。解决方法包括避免最后一步使用union all,或者通过配置使Spark采用Hive的数据解析方式来读取子目录中的Parquet表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题解决: Spark无法读取有多个子目录的Parquet表

用tez做数据处理时,免不了要用union all来整合多个数据源的数据。但是如果最后一步是union all的话,就会生成多个子目录,这时用Spark就可能无法读取到子目录中的内容(取决于spark的配置)。

这个问题的原因是tez的union all是并行去做的,为了避免文件的冲突,tez写到了多个子目录里面。解决这个问题有两个方向,一个是不生成子目录,一个是修改spark的配置。

不生成子目录, 只要最后一步不是union all就好了

1、再sql最后面增加distribute by, 强制触发一次reduce过程
2、union all插表结束之后,再做一次自表插入(insert overwrite self select from self)
3、不用union all,而是insert overwrite一次,然后insert一次。

参考文档: https://grokbase.com/t/hive/user/158kd4k645/tez-anyway-to-avoid-creating-subdirectories-by-insert-with-union-all

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值