最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年08月25日 11:17:40   作者:土豆啊你個(gè)馬鈴薯  
這篇文章主要介紹了pyspark操作hive分區(qū)表及.gz.parquet和part-00000文件壓縮問題,針對問題整理了spark操作hive表的幾種方式,需要的朋友可以參考下

pyspark 操作hive表

pyspark 操作hive表,hive分區(qū)表動(dòng)態(tài)寫入;最近發(fā)現(xiàn)spark動(dòng)態(tài)寫入hive分區(qū),和saveAsTable存表方式相比,文件壓縮比大約 4:1。針對該問題整理了 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ò)或者終止程序會導(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("表名") 不會覆蓋數(shù)據(jù)
2、需要表必須存在且當(dāng)前DF的schema與目標(biāo)表的schema必須一致
3、插入的文件不會壓縮;文件以part-00....結(jié)尾。文件較大

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

2.1> 問題說明

兩種方式存儲數(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 '測試'
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 '測試'
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 '測試'
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 '測試'
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 '測試'
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ù)存儲在hdfs上。
示例:

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

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

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

相關(guān)文章

  • python 實(shí)現(xiàn)Harris角點(diǎn)檢測算法

    python 實(shí)現(xiàn)Harris角點(diǎn)檢測算法

    這篇文章主要介紹了python 實(shí)現(xiàn)Harris角點(diǎn)檢測算法,幫助大家更好的利用python處理圖像,感興趣的朋友可以了解下
    2020-12-12
  • 安裝dbus-python的簡要教程

    安裝dbus-python的簡要教程

    這篇文章主要介紹了安裝dbus-python的簡要教程,dbus-python在Python編程中多用于處理進(jìn)程之間的通信,需要的朋友可以參考下
    2015-05-05
  • Python中執(zhí)行調(diào)用JS的多種實(shí)現(xiàn)方法總結(jié)

    Python中執(zhí)行調(diào)用JS的多種實(shí)現(xiàn)方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Python中執(zhí)行調(diào)用JS的多種實(shí)現(xiàn)方法,在一些特殊的python應(yīng)用場景下需要逆向執(zhí)行javascript代碼塊或者.js文件,需要的朋友可以參考下
    2023-08-08
  • Python中TypeError: int object is not iterable錯(cuò)誤分析及解決辦法

    Python中TypeError: int object is not 

    在Python中,當(dāng)你嘗試對一個(gè)非迭代對象(如整數(shù)、浮點(diǎn)數(shù)等)使用迭代操作(如for循環(huán)、列表推導(dǎo)式中的迭代等)時(shí),會觸發(fā)TypeError: 'int' object is not iterable錯(cuò)誤,所以本文給大家介紹了Python中TypeError: int object is not iterable錯(cuò)誤分析及解決辦法
    2024-08-08
  • Python實(shí)現(xiàn)讀取文件的方法總結(jié)

    Python實(shí)現(xiàn)讀取文件的方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Python中實(shí)現(xiàn)讀取文件效果的幾種方法總結(jié),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-09-09
  • 關(guān)于Python卷積函數(shù)詳解

    關(guān)于Python卷積函數(shù)詳解

    這篇文章主要介紹了Python關(guān)于卷積的理解,文中有詳細(xì)的代碼示例,具有很好的參考價(jià)值,希望對大家有所幫助
    2023-04-04
  • 用Python生成會跳舞的美女

    用Python生成會跳舞的美女

    大家好,本篇文章主要講的是用Python生成會跳舞的美女,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Python實(shí)現(xiàn)的銀行系統(tǒng)模擬程序完整案例

    Python實(shí)現(xiàn)的銀行系統(tǒng)模擬程序完整案例

    這篇文章主要介紹了Python實(shí)現(xiàn)的銀行系統(tǒng)模擬程序,結(jié)合完整實(shí)例形式分析了Python基于面向?qū)ο蟪绦蛟O(shè)計(jì)模擬的銀行系統(tǒng)登錄驗(yàn)證、開戶、找回密碼、掛失、查詢、存取款、轉(zhuǎn)賬等功能相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • echarts折線圖的每個(gè)折點(diǎn)都顯示數(shù)值的實(shí)現(xiàn)方式

    echarts折線圖的每個(gè)折點(diǎn)都顯示數(shù)值的實(shí)現(xiàn)方式

    這篇文章主要介紹了echarts折線圖的每個(gè)折點(diǎn)都顯示數(shù)值的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 淺談python和C語言混編的幾種方式(推薦)

    淺談python和C語言混編的幾種方式(推薦)

    下面小編就為大家?guī)硪黄獪\談python和C語言混編的幾種方式(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論

云阳县| 广元市| 鸡东县| 七台河市| 陆河县| 武乡县| 上高县| 乐昌市| 德保县| 如东县| 准格尔旗| 南陵县| 淮安市| 西乌| 安顺市| 海南省| 柘荣县| 镇原县| 肥城市| 霸州市| 饶平县| 天津市| 晋江市| 泽库县| 延寿县| 红河县| 漳浦县| 平塘县| 和林格尔县| 确山县| 志丹县| 赞皇县| 怀远县| 开封县| 沾益县| 安吉县| 宾阳县| 扶绥县| 营山县| 介休市| 霸州市|