激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - pyspark操作hive分區表及.gz.parquet和part-00000文件壓縮問題

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

2021-12-24 00:41土豆啊你個馬鈴薯 Python

這篇文章主要介紹了pyspark操作hive分區表及.gz.parquet和part-00000文件壓縮問題,針對問題整理了spark操作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分區表及.gz.parquet和part-00000文件壓縮問題

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分區表及.gz.parquet和part-00000文件壓縮問題

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 "01" 
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 "01" 
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 "01" 
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 "01" 
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 "01" 
STORED AS PARQUET 
TBLPROPERTIES ("parquet.compression"="GZIP");

執行效果

數據文件在hdfs上顯示:

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

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

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

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

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

到此這篇關于pyspark操作hive分區表及.gz.parquet和part-00000文件壓縮問題的文章就介紹到這了,更多相關pyspark hive分區表parquet內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/Sherry-g/p/15184002.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91精选视频在线观看 | 老a影视网站在线观看免费 欧美日韩成人一区二区 | 成人一区二区三区在线 | xxxx18韩国护士hd老师 | 黄网站免费在线看 | 韩日黄色片 | 国产精品v片在线观看不卡 成人一区二区三区在线 | 康妮卡特欧美精品一区 | 把娇妻调教成暴露狂 | 中文字幕专区高清在线观看 | 欧美999| 泰剧19禁啪啪无遮挡大尺度 | 青青草成人免费视频在线 | 91久久国产综合久久91精品网站 | 午夜精品小视频 | 国产一区在线免费 | 国产精品99一区二区 | 色淫网站免费视频 | 欧美性生交大片 | 精品中文视频 | 日韩一级视频 | 护士hd欧美free性xxxx | 久久蜜桃香蕉精品一区二区三区 | 国产精品久久在线观看 | 激情在线观看视频 | 美国一级免费视频 | 国产激情精品一区二区三区 | 一本色道久久99精品综合蜜臀 | 欧美日韩爱爱视频 | 久久骚 | 精品人伦一区二区三区蜜桃网站 | 国产美女自拍av | 欧美日韩一区,二区,三区,久久精品 | 毛片免费观看视频 | 午夜影视一区二区 | 国产亚洲综合精品 | 亚洲第一成人在线观看 | 中文字幕在线播放视频 | 久久国产经典 | 人人做人人看 | 国产亚洲精品久久久久婷婷瑜伽 |