pyspark操作hive分区表及.gz.parquet和part

目录

操作蜂巢表

操作hive表,动态写入hive分区表;最近发现spark动态写入hive分区hive编程指南这本书好么,与存储表的方式相比hive编程指南这本书好么,文件压缩比约为4:1。针对这个问题,整理了spark操作hive表的几种方式。

1>写

(self, name, =None, mode=None, =None, **)

例子:

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

注意:

1、如果表不存在,则创建表,表存在且全覆盖;

2、表存在,数据字段发生变化,先删除再重新建表;

3、当保存表格时发生错误或程序终止时,表格会丢失;

4、数据默认压缩,文件名为part-00000–66fe-4fd1-bebb-.gz。

数据文件显示在hdfs上:

图片[1]-pyspark操作hive分区表及.gz.parquet和part-唐朝资源网

2>写

(self, , =False):

例子:


# append 写入
df.repartition(1).write.partitionBy('dt').insertInto("表名")
# overwrite 写入
df.repartition(1).write.partitionBy('dt').insertInto("表名",overwrite=True)
# 动态分区使用该方法

@ >

注意:

1、df.write.mode(“”).(“dt”).(“table name”) 不会覆盖数据

p>

2、表必须存在且当前DF必须与目标表一致

3、插入的文件不会被压缩;文件以 part-00….End 开头。更大的文件

数据文件显示在 hdfs 上:

图片[2]-pyspark操作hive分区表及.gz.parquet和part-唐朝资源网

2.1>问题描述

这两种方式存储的数据量相同,但是磁盘文件的比例差别很大。 .gz。文件比 part-00000 文件小得多。我想用spark来操作分区表,我想压缩文件。百度尝试了一些方法,都没有解决。

Spark 也有类似的问题何时使用 Hive 表。里面的方法没有解决。

最后从hive表数据文件压缩的​​角度思考,问题解决了。

Hive表创建指定压缩格式

以下是hive的几种压缩方式

图片[3]-pyspark操作hive分区表及.gz.parquet和part-唐朝资源网

-- 使用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> 解决方案

创建表时指定,使用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上:

图片[4]-pyspark操作hive分区表及.gz.parquet和part-唐朝资源网

可以看到文件大小比例和*.gz一样。文件格式

3>写入直接操作文件

(自我,路径,s=None)

该方法通过rdd在hdfs上直接以文件形式存储数据。

例子:

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

更多关于文件操作的信息,请查看官方文档

转到这篇关于操作 hive 分区表和 .gz 的文章。这里介绍part-00000文件压缩问题。更多相关hive分区表内容请在自学编程网搜索以往文章或继续浏览下方相关文章。希望大家以后支持自学编程。网络!

© 版权声明
THE END
喜欢就支持一下吧
点赞218赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容