通过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';
修改之后则正常使用了;