利用python对数据分流
来源:互联网 发布:淘宝店铺关注人数越多 编辑:程序博客网 时间:2024/04/28 14:56
业务需求:hive表中包含了顺丰的所有的运单流向(北京到深圳为一个流向,全国大约十万个流向),现将数据分流,将每一个流向写入一个文件中
report_dt 报表时间
src_area_code 始发地区代码
src_dept_name 始发地区名称
dest_area_code 目的地区代码
dest_dept_name 目的地区名称
first_segment_zone 收件网点
last_segment_zone 送件网点
send_city 收件城市流向字段
arrive_city 寄件城市 流向字段
product_type 产品类型
cost_tm 运单时长
full_route_3 路由1
full_route_2 路由2
full_route_1 路由3
id id
pt_month 分区字段
pt_date 子分区
数据量:5G
分析:1 用hive sql 将流向一个一个导出,按每个流向3分钟计算,超过半年的时间才能完成,pass
2 开始想过,利用hive 动态分区功能,将每一个流向放入一下分区中,但是hive不支持这么多分区,pass!
3 利用MR编程处理,处理成本不划算!待选
4 5G文件,利用python 进行分流!首选
代码实现:
# -*- coding: utf-8 -*-"""Created on Mon Feb 20 10:55:44 2017数据分流@author: 80002419"""##主要用到的三方包是pandasimport pandas as pdimport time#time.sleep(18000)t1 = time.time()# 定义一个将df对象保存到本地的对象 ,文件以追加模式 'a' 打开def savefile(df,file_name): ''' 将数据保存到本地 @df:要保存的Dataframe @file_name:保存文件名 ''' df.to_csv(r'E:\python\static_data\%s.csv' %file_name,mode = 'a')#将hive数组文件,重定向到到本地 命名 yx20170228.csv##数据字段 按表结构命名,columns=['report_dt', 'src_area_code', 'src_dept_name', 'dest_area_code', 'dest_dept_name', 'first_segment_zone', 'last_segment_zone', 'send_city', 'arrive_city', 'product_type', 'cost_tm', 'full_route_3', 'full_route_2', 'full_route_1', 'id', 'pt_month', 'pt_date',]# 控制while 循环变量loop = True##文件执行跟踪变量prosess = 0# 利用pandas read_csv 读出源文件 ,因为文件过大设置参数iterator=True,等到可以迭代的df 对象:readerreader = pd.read_csv('E:\python\yx20170228.csv',iterator=True,names=list(columns),encoding = 'gbk')# 处理逻辑主体:while loop: try: df = reader.get_chunk(1000000) ## 分块读取大文件对象,get_chunk(1000000)每次读取1G内容 list = df.groupby(['send_city','arrive_city']) # 将df对象按 df.groupby 分组, for name,group in list: print(name,prosess) savefile(group,str(name[0])+'-'+ str(name[1])) #分别把同一组的的数据写到同一个文件中去! prosess += 1 except StopIteration: loop = False # reader 迭代完,就结束循环 print('Iter is shoped!')t = time.time() - t1print(t)
总共花费时间:5900+s花费时长较长,有待优化
- 利用python对数据分流
- 利用Nginx_Resin_tomcat为网站分流
- 利用Python对二进制数据进行按位处理
- 利用 python 对文件夹下图片数据进行批量改名
- caffe-windows利用python对数据进行可视化
- 利用Python对NBA SportUV数据进行可视化及分析
- 智能数据分流Smart Data Offload
- 系统减压数据分流--------权限控制
- 利用Python对文件批量命名
- 利用python对Excel中的特定数据提取并写入新表
- 利用python对多个txt文件中的数据进行筛选
- 利用python对中文文本数据进行LDA训练、计算概率距离
- 利用 Python 练习数据挖掘
- 利用 Python 学习数据挖掘
- 利用python分析邮件数据
- 利用 Python 练习数据挖掘
- 利用 Python 练习数据挖掘
- 《利用Python进行数据挖掘》
- C#读取ini文件数据的方法和后台服务的相关知识
- Android Studio常用快捷键
- JAVA中Set接口
- 读取assets目录下的文件详细介绍
- NOIP2017模拟赛(二)总结
- 利用python对数据分流
- 浅谈Spring的 context:component-scan
- JSON.parse和eval的区别
- Swift 开发中,为什么要远离 Heap?
- PAT 1007. 素数对猜想
- net面试2
- web多服务器之间的session同步方法
- 及时推送个推集成
- 每周荐书:MySQL、Kafka、微信小程序(评论送书)