读取大型Csv地图数据并通过HTTP发送

问题描述 投票:0回答:1

您好,我有大型 CSV 文件 (20GB) ~ 100 kk 行需要处理。 CSV 结构很简单,有 4 列 var1、var2、var3、timestamp(yyyy-MM-dd) - 所有列都是字符串。 所以我应该逐行读取 csv 然后准备请求(将日期转换为日期时间)并将请求发送到服务器。我无法发送批量数据。

import pandas as pd
import string
from datetime import datetime
import aiohttp
import asyncio

url_data = 'http://localhost:8080/test'
template = string.Template(("""<?xml version="1.0" encoding="UTF-8"?>
<request>
    <const1>CONST1</const1>
    <const2>CONST2</const2>
    <var1>${VAR1}</var1>
    <timestamp>${DATETIME}</timestamp>
    <const3>CONST3</const3>
    <var2>${VAR2}</var2>
    <var3>${VAR3}</var3>
</request>"""))


async def process():
    async with aiohttp.ClientSession() as session:
        for chunk in pd.read_csv('test.csv', chunksize=50000):
            await asyncio.gather(asyncio.create_task(send(session, chunk)))


async def send(session, chunk):
    for index, row in chunk.iterrows():
        date = datetime.strptime(row['DATETIME'], '%Y-%m-%d')
        row['DATETIME'] = date.strftime("%Y-%m-%dT%H:%M:%SZ")
        await session.post(url=url_data, data=template.safe_substitute(row))


if __name__ == '__main__':
    asyncio.run(process())

我已经准备了一个Python脚本,我想要一些关于是否可以进一步优化速度的建议

python pandas csv python-asyncio
1个回答
-2
投票

将 CSV 文件拆分为更小的文件,并以比此处更小的批次发送它们

© www.soinside.com 2019 - 2024. All rights reserved.