目录
操作蜂巢表
操作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上:
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.1>问题描述
这两种方式存储的数据量相同,但是磁盘文件的比例差别很大。 .gz。文件比 part-00000 文件小得多。我想用spark来操作分区表,我想压缩文件。百度尝试了一些方法,都没有解决。
Spark 也有类似的问题何时使用 Hive 表。里面的方法没有解决。
最后从hive表数据文件压缩的角度思考,问题解决了。
Hive表创建指定压缩格式
以下是hive的几种压缩方式
-- 使用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上:
可以看到文件大小比例和*.gz一样。文件格式
3>写入直接操作文件
(自我,路径,s=None)
该方法通过rdd在hdfs上直接以文件形式存储数据。
例子:
rdd.saveAsTextFile('hdfs://表全路径')
更多关于文件操作的信息,请查看官方文档
转到这篇关于操作 hive 分区表和 .gz 的文章。这里介绍part-00000文件压缩问题。更多相关hive分区表内容请在自学编程网搜索以往文章或继续浏览下方相关文章。希望大家以后支持自学编程。网络!
暂无评论内容