利用python对数据分流

业务需求: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
"""
##主要用到的三方包是pandas
import pandas as pd
import 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 对象:reader
reader = 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() - t1
print(t)







总共花费时间:5900+s

花费时长较长,有待优化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
利用 Python 对 HTTP 网页数据进行爬取,可以使用 Python 的 requests 库和 BeautifulSoup 库。 首先,使用 requests 库发送 HTTP 请求获取网页数据: ```python import requests url = 'https://www.example.com' response = requests.get(url) html = response.text ``` 上面的代码中,首先定义了目标网页的 URL,然后使用 requests 库发送 GET 请求并获取响应。响应的内容可以通过 `response.text` 属性获取,这里将其赋值给变量 `html`。 接下来,可以使用 BeautifulSoup 库解析网页内容: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'html.parser') ``` 上面的代码中,首先导入了 BeautifulSoup 类,并且使用 `'html.parser'` 作为解析器。然后将之前获取的网页内容 `html` 传给 BeautifulSoup 类,并将其返回的对象赋值给变量 `soup`。 现在,可以使用 BeautifulSoup 对象来查找网页中的需要的信息。例如,如果想要查找网页中的所有链接,可以使用以下代码: ```python links = [] for link in soup.find_all('a'): links.append(link.get('href')) ``` 上面的代码中,使用 `soup.find_all('a')` 方法查找网页中所有的 `a` 标签,并使用 `link.get('href')` 方法获取每个标签的 `href` 属性值,最后将这些值添加到列表 `links` 中。 这就是使用 Python 对 HTTP 网页数据进行爬取的基本过程。当然,在实际爬取中,还需要考虑网站的反爬措施、爬取速度等因素。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crystalnsd

万水千山总是情,支持一下行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值