Parquet表在spark与Impala间不兼容问题

来源:互联网 发布:上市公司数据分析 编辑:程序博客网 时间:2024/06/06 09:43
1、出现的问题;
利用impala和hive单独查询数据时可以正常读取parquet文件的表;但是利用spark-sql 读取时报错;
Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: parquet.hive.DeprecatedParquetInputFormat (state=,code=0);
2、问题分析;

通过desc formatted 比对了下生成表的格式:

这里是spark-sql下创建的parquet表格式:

SerDe Library:               | org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe   
InputFormat:                 | org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat 
OutputFormat:                | org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat


这里是Impala下创建的parquet表格式:

SerDe Library:               | parquet.hive.serde.ParquetHiveSerDe       
InputFormat:                 | parquet.hive.DeprecatedParquetInputFormat 
OutputFormat:                | parquet.hive.DeprecatedParquetOutputFormat

由此可知spark 和impala 的数据存储parquet格式不一致,而导致在spark下不能正确识别。

下面这个命令是在implala-shell下执行,或者spark beline下运行。


ALTER TABLE par_crt_impala SET FILEFORMAT

INPUTFORMAT"org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat"

OUTPUTFORMAT"org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat" 

SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe';

修改之后则正常使用了;

原创粉丝点击