五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動(dòng)態(tài)

pyspark操作hive分區(qū)表及.gz.parquet和part-00000文件壓縮問題

發(fā)布日期:2022-02-05 12:29 | 文章來源:CSDN

pyspark 操作hive表

pyspark 操作hive表,hive分區(qū)表動(dòng)態(tài)寫入;最近發(fā)現(xiàn)spark動(dòng)態(tài)寫入hive分區(qū),和saveAsTable存表方式相比,文件壓縮比大約 4:1。針對(duì)該問題整理了 spark 操作hive表的幾種方式。

1> saveAsTable寫入

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

示例:

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

注意:

1、表不存在則創(chuàng)建表,表存在全覆蓋寫入;
2、表存在,數(shù)據(jù)字段有變化,先刪除后重新創(chuàng)建表;
3、當(dāng)正在存表時(shí)報(bào)錯(cuò)或者終止程序會(huì)導(dǎo)致表丟失;
4、數(shù)據(jù)默認(rèn)采用parquet壓縮,文件名稱 part-00000-5efbfc08-66fe-4fd1-bebb-944b34689e70.gz.parquet

數(shù)據(jù)文件在hdfs上顯示:

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)
# 動(dòng)態(tài)分區(qū)使用該方法

注意:

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

數(shù)據(jù)文件在hdfs上顯示:

2.1> 問題說明

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

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

-- 使用snappy
CREATE TABLE if not exists ods.table_test(
 id string,
 open_time string
	)
COMMENT '測(cè)試'
PARTITIONED BY (`dt` string COMMENT '按天分區(qū)')
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 '測(cè)試'
PARTITIONED BY (`dt` string COMMENT '按天分區(qū)')
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 '測(cè)試'
PARTITIONED BY (`dt` string COMMENT '按天分區(qū)')
row format delimited fields terminated by '\001' 
STORED AS PARQUET 
TBLPROPERTIES ('parquet.compression'='UNCOMPRESSED');
 
-- 使用默認(rèn)
CREATE TABLE if not exists ods.table_test(
 id string,
 open_time string
	)
COMMENT '測(cè)試'
PARTITIONED BY (`dt` string COMMENT '按天分區(qū)')
row format delimited fields terminated by '\001' 
STORED AS PARQUET;
 
-- 設(shè)置參數(shù) set parquet.compression=SNAPPY;

2.2> 解決辦法

建表時(shí)指定TBLPROPERTIES,采用gzip 壓縮
示例:

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

執(zhí)行效果

數(shù)據(jù)文件在hdfs上顯示:

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

3>saveAsTextFile寫入直接操作文件

saveAsTextFile(self, path, compressionCodecClass=None)
該方式通過rdd 以文件形式直接將數(shù)據(jù)存儲(chǔ)在hdfs上。
示例:

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

文件操作更多方式見官方文檔

到此這篇關(guān)于pyspark操作hive分區(qū)表及.gz.parquet和part-00000文件壓縮問題的文章就介紹到這了,更多相關(guān)pyspark hive分區(qū)表parquet內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

香港服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對(duì)1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部