通过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';
修改之后则正常使用了;
本文解决了一个关于Spark SQL无法读取由Impala创建的Parquet格式表的问题。原因是Spark与Impala使用的Parquet文件格式设置不同。通过调整表的输入输出格式和SerDe设置,成功实现了两者的兼容。
1258

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



