问题解决: 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一次。

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

最低0.47元/天 解锁文章
2990

被折叠的 条评论
为什么被折叠?



