亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pyspark如何操作hive表

發布時間:2021-08-25 14:51:13 來源:億速云 閱讀:1043 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關pyspark如何操作hive表的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

pyspark 操作hive表

pyspark 操作hive表,hive分區表動態寫入;最近發現spark動態寫入hive分區,和saveAsTable存表方式相比,文件壓縮比大約 4:1。針對該問題整理了 spark 操作hive表的幾種方式。

1> saveAsTable寫入

saveAsTable(self, name, format=None, mode=None, partitionBy=None, **options)

示例:

df.write.saveAsTable("表名",mode='overwrite')

注意:

1、表不存在則創建表,表存在全覆蓋寫入;
2、表存在,數據字段有變化,先刪除后重新創建表;
3、當正在存表時報錯或者終止程序會導致表丟失;
4、數據默認采用parquet壓縮,文件名稱 part-00000-5efbfc08-66fe-4fd1-bebb-944b34689e70.gz.parquet

數據文件在hdfs上顯示:

pyspark如何操作hive表

2> insertInto寫入

insertInto(self, tableName, overwrite=False):
示例:

# append 寫入
df.repartition(1).write.partitionBy('dt').insertInto("表名")
# overwrite 寫入
df.repartition(1).write.partitionBy('dt').insertInto("表名",overwrite=True)
# 動態分區使用該方法

注意:

1、df.write.mode("overwrite").partitionBy("dt").insertInto("表名") 不會覆蓋數據
2、需要表必須存在且當前DF的schema與目標表的schema必須一致
3、插入的文件不會壓縮;文件以part-00....結尾。文件較大

數據文件在hdfs上顯示:

pyspark如何操作hive表

2.1> 問題說明

兩種方式存儲數據量一樣的數據,磁盤文件占比卻相差很大,.gz.parquet 文件 相比 part-00000文件要小很多。想用spark操作分區表,又想讓文件壓縮,百度了一些方式,都沒有解決。
從stackoverflow中有一個類似的問題 Spark compression when writing to external Hive table 。用里面的方法并沒有解決。
最終從hive表數據文件壓縮角度思考,問題得到解決。

hive 建表指定壓縮格式
下面是hive parquet的幾種壓縮方式

-- 使用snappy
CREATE TABLE if not exists ods.table_test(
    id string,
    open_time string
	)
COMMENT '測試'
PARTITIONED BY (`dt` string COMMENT '按天分區')
row format delimited fields terminated by '\001' 
STORED AS PARQUET 
TBLPROPERTIES ('parquet.compression'='SNAPPY');

-- 使用gzip
CREATE TABLE if not exists ods.table_test(
    id string,
    open_time string
	)
COMMENT '測試'
PARTITIONED BY (`dt` string COMMENT '按天分區')
row format delimited fields terminated by '\001' 
STORED AS PARQUET 
TBLPROPERTIES ('parquet.compression'='GZIP');
 
-- 使用uncompressed
CREATE TABLE if not exists ods.table_test(
    id string,
    open_time string
	)
COMMENT '測試'
PARTITIONED BY (`dt` string COMMENT '按天分區')
row format delimited fields terminated by '\001' 
STORED AS PARQUET 
TBLPROPERTIES ('parquet.compression'='UNCOMPRESSED');

 
-- 使用默認
CREATE TABLE if not exists ods.table_test(
    id string,
    open_time string
	)
COMMENT '測試'
PARTITIONED BY (`dt` string COMMENT '按天分區')
row format delimited fields terminated by '\001' 
STORED AS PARQUET;
 
-- 設置參數 set parquet.compression=SNAPPY;

2.2> 解決辦法

建表時指定TBLPROPERTIES,采用gzip 壓縮
示例:

drop table if exists ods.table_test
CREATE TABLE if not exists ods.table_test(
id string,
open_time string
)
COMMENT '測試'
PARTITIONED BY (`dt` string COMMENT '按天分區')
row format delimited fields terminated by '\001' 
STORED AS PARQUET 
TBLPROPERTIES ('parquet.compression'='GZIP');

執行效果

數據文件在hdfs上顯示:

pyspark如何操作hive表

可以看到文件大小占比已經和 *.gz.parquet 文件格式一樣了

3>saveAsTextFile寫入直接操作文件saveAsTextFile(self, path, compressionCodecClass=None)
該方式通過rdd 以文件形式直接將數據存儲在hdfs上。
示例:

rdd.saveAsTextFile('hdfs://表全路徑')

感謝各位的閱讀!關于“pyspark如何操作hive表”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贺州市| 重庆市| 鹤山市| 威宁| 陆河县| 灵寿县| 七台河市| 宝清县| 天祝| 铁力市| 石家庄市| 沙田区| 大新县| 涟水县| 夏河县| 邹城市| 张家口市| 瓮安县| 塘沽区| 施甸县| 绥滨县| 威远县| 迁安市| 苍南县| 庆云县| 砚山县| 比如县| 普兰县| 莎车县| 洛川县| 喀什市| 广南县| 华蓥市| 兰考县| 秭归县| 江都市| 安国市| 文昌市| 宁阳县| 闻喜县| 英德市|