SparkSQL與Hive metastore Parquet
Spark SQL為了更好的效能,在讀寫Hive metastore parquet格式的表時,會預設使用自己的Parquet SerDe,而不是採用Hive的SerDe進行序列化和反序列化。
該行為可以通過配置引數spark.sql.hive.convertMetastoreParquet進行控制,預設true。
這裡從表schema的處理角度而言,就必須注意Hive和Parquet相容性,主要有兩個區別:
-
Hive是大小寫敏感的,但Parquet相反
-
Hive會將所有列視為nullable,但是nullability在parquet裡有獨特的意義
由於上面的原因,在將Hive metastore parquet轉化為Spark SQL parquet時,需要相容處理一下Hive和Parquet的schema,即需要對二者的結構進行一致化。主要處理規則是:
-
有相同名字的欄位必須要有相同的資料型別,忽略nullability。相容處理的欄位應該保持Parquet側的資料型別,這樣就可以處理到nullability型別了(空值問題)
-
相容處理的schema應只包含在Hive後設資料裡的schema資訊,主要體現在以下兩個方面:
(1)只出現在Parquet schema的欄位會被忽略
(2)只出現在Hive後設資料裡的欄位將會被視為nullable,並處理到相容後的schema中
關於schema(或者說後設資料metastore),Spark SQL在處理Parquet表時,同樣為了更好的效能,會快取Parquet的後設資料資訊。此時,如果我們直接通過Hive或者其他工具對該Parquet表進行修改導致了後設資料的變化,那麼Spark SQL快取的後設資料並不能同步更新,此時需要手動重新整理Spark SQL快取的後設資料,來確保後設資料的一致性,方式如下:
// 第一種方式應用的比較多
1. sparkSession.catalog.refreshTable(s"${dbName.tableName}")
2. sparkSession.catalog.refreshByPath(s"${path}")
相關文章
- Hive metastore三種配置方式HiveAST
- SparkSQL讀取Parquet格式的資料載入DatFrameSparkSQL
- SparkSQL:Parquet資料來源之合併後設資料SparkSQL
- 【Spark篇】---SparkSQL on Hive的配置和使用SparkSQLHive
- MySQL到TiDB:Hive Metastore橫向擴充套件之路MySqlTiDBHiveAST套件
- SparkSQL -- 02 【SparkSQL檔案的讀取與落地,和Hive的整合,內建函式,自定義函式】SparkSQLHive函式
- (十二)SparkSQL Catalog訪問Hive後設資料資訊SparkSQLHive
- 從Hive遷移到SparkSQL,有讚的大資料實踐HiveSparkSQL大資料
- hive metastore異常 org.apache.thrift.protocol.TProtocolException: Missing version in readMessageBegin, old clientHiveASTApacheProtocolExceptionclient
- SparkSQL部署與簡單使用SparkSQL
- SparkSql與Redis綜合練習SparkSQLRedis
- Parquet.Net: 將 Apache Parquet 移植到 .NETApache
- Spark儲存Parquet資料到Hive,對map、array、struct欄位型別的處理SparkHiveStruct型別
- SparkSQL 概述SparkSQL
- Spark Parquet詳解Spark
- Spark SQL解析查詢parquet格式Hive表獲取分割槽欄位和查詢條件SparkSQLHive
- Hive之 hive與hadoop的聯絡HiveHadoop
- SparkSQL 調優SparkSQL
- SparkSQL手冊SparkSQL
- SparkSQL概念學習系列之為什麼使用SparkSQL?(二)SparkSQL
- SparkSQL 相關APISparkSQLAPI
- Hive的安裝與配置Hive
- Hive配置與操作實踐Hive
- SparkSQL 開窗函式SparkSQL函式
- SparkSQL開窗函式SparkSQL函式
- 03-SparkSQL入門SparkSQL
- HIVE之 Sqoop 1.4.6 安裝、hive與oracle表互導HiveOOPOracle
- hive與hbase的聯絡與區別Hive
- Presto 與 Hive 語法學習RESTHive
- Hive列合併與元素蒐集Hive
- 解析Pyspark如何讀取parquet資料Spark
- CodeForces - 26C Parquet【構造】
- SparkSQL /DataFrame /Spark RDD誰快?SparkSQL
- SparkSql 06 開窗函式SparkSQL函式
- SparkSQL外部資料來源SparkSQL
- SparkSQL 在有讚的實踐SparkSQL
- HIVE隨手記——Hive命令(?$HIVE_HOME/bin/hive)Hive
- Apache Hive-2.3.0 快速搭建與使用ApacheHive