关于spark配置项 和 hive serDe 和 spark serDe
spark.sql.hive.convertMetastoreParquet
hive serde:
文档: https://spark.apache.org/docs/latest/configuration.html
Serde是 Serializer/Deserializer的简写。hive使用Serde进行行对象的序列与反序列化
参数: spark.sql.hive.convertMetastoreParquet 控制读写parquet的序列化反序列化类.
true(默认值): 使用(Parquet SerDe)spark-sql内置的parquet的reader和writer(即进行反序列化和序列化),它具有更好地性能
false: 则代表使用 Hive的序列化方式
注意:
如果使用同一个parquet,序列化反序列化需要一致,即读写需要用同一个serde方式.
其他相关:
dataframe.saveAsTable("tbName") 并不是创建hive表(hive serde), 而是创建spark(内部)表(spark Parquet serde).
如果想创建hive (serde)表:
方法1: spark.sql("create table ... stored as parquet")
方法2: df.insertInto(tableName,OverWrite.Append/Overwrite) //表之前是hive serde
方法3: set spark.sql.hive.convertMetastoreParquet=false df.saveAsTable(...)
怎么区分hive表是 hive serde还是 spark serde:
spark serde建立的表结构包含:
WITH SERDEPROPERTIES (
'path'='hdfs://hdfsHACluster/user/hive/warehouse/rljl.db/fc_p_face_centro_relation')