HDFS日志json转存成parquet方案

转:http://blog.csdn.net/jobschen/article/details/77196092


收集的业务数据为json格式,准备利用parquet 格式重新存储到hive表,以节约空间并方便后续通过spark 或 hive 进行分析查询。
(示例代码是用python)
具体步骤是:
1. 用spark读取json数据后,得到一个dataframe

path = '/xx/xxx/xxx.json'
df = sqlContext.read.json(path)
  
  
  • 1
  • 2

2. dataframe 经过filter 、select 等操作再以parquet格式写入hdfs指定路径

df = df.filter(‘xxx’).select(‘xxx’)

3. 目录是按天分区,类似 /parquet/xxxxxx/dt=2017-06-06 这样

df.write.parquet(“/parquet/xxxxxx/dt=2017-06-06”,”overwrite”)

4. 建立对应hive表

CREATE  TABLE xxxxxx(
`xx` string, 
`xxx` bigint,
`xxxxx` string
... ...
...
) 
partitioned by (dt string ) 
STORED as PARQUET 
LOCATION '/parquet/xxxxxx'; 
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

5.这样建立完以后,hive还需要执行一步数据加载,才能查到数据

load data  inpath '/parquet/xxxxxx/dt=2017-06-06' into table xxxxxx partition(dt='2017-06-06')

或者

alter table xxxxxx add partition(dt='2017-06-06') location '/parquet/xxxxxx/dt=2017-06-06';
  
  
  • 1
  • 2
  • 3
  • 4
  • 5

load 和 alter 的主要区别是:
load 会创建分区目录,并移动数据到分区下,alter 的方式不会创建分区目录,也不会移动数据。
个人场景alter 方式添加分区更适合。

把json 存储为parquet,不但可以节省50%左右的存储空间,更方便后续工作中的数据查询,并且查询效率比文本方式更高。
如果有更好的方式,欢迎各位大神留言讨论。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值