esproc vs python 6

本节在数据量比较大的情况下,对比esproc和python。

数据量:7000多条万记录,5个字段分别是orderid,clientid,sellerid,amount,date。总大小超过3G。

1. 筛选8月份的交易记录

esproc

  A
1 =now()
2 =file("E:\\orders_big_data\\orders.csv").cursor@tc()
3 =A2.select(month(date)==8).fetch()
4 =interval@ms(A1,now())

A2:f.cursor()

根据文件f创建游标并返回,数据扫描完将自动关闭游标。@t, f中第一行记录作为字段名,不使用本选项时默认使用_1,_2,…作为字段名. @c, 无s时用逗号分隔。如果同时有s则用s分隔。

A3:筛选出8月份的订单记录并取出结果

esproc并行代码:

  A
1 =now()
2 =file("E:\\orders_big_data\\orders.csv").cursor@tmc(;16)
3 =A2.select(month(date)==8).fetch()
4 =interval@ms(A1,now())

A2:cursor@m(;n),@m选项,返回成多路游标,n表示路数。这时结果可能改变原来数据的顺序(筛选数据大多数情况下也不需要保持原序)。

python:

import time

import pandas as pd

import numpy as np

s = time.time()

chunksize=1000000

order_data = pd.read_csv('E:\\orders_big_data\\orders.csv',iterator=True,chunksize=chunksize)

i = 0

month_8_list = []

for chunk in order_data:

    chunk['date'] = pd.to_datetime(chunk['date'])

    chunk_month_8 = chunk[chunk['date'].dt.month==8]

    month_8_list.append(chunk_month_8)

month_8 = pd.concat(month_8_list,ignore_index=True)

print(month_8)

e = time.time()

print(e-s)

定义chunksize大小为1000000万条记录。

pd.read_csv(fileorbuf,iterator,chunksize) iterator,返回一个TextFileReader 对象,以便逐块处理文件,chunksize文件块大小。

循环读取文件,每次都取chunksize的大小,筛选出8月份的记录,放入初始化的list中。

合并list中的dataframe得到结果。

pandas本身不支持并行,所以这里没有python的并行测试。

结果:

esproc单线程

esproc并行:

python

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值