电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 2285 人浏览分享

Linux大文件文本处理遇到的问题分析

[复制链接]
2285 0

前言:

最近项目在做数据分析,需要接入大量的客户数据;理论上如果我直接访问对方数据库不会慢的,
但是对方不允许我们直接访问,要他们推送给我们,一个mysql数据库做中转,这中间写入mysql,
我从mysql 读取,速度慢太多了。因此考虑历史数据通过文件发送给我们。综合考虑采用方案为实时
数据采用推送,历史数据采用文件一次性给我们。这就带来了一个问题,历史数据有100G。直接读取,
内存受不了。按行读取处理太慢。

问题描述:

由于我的要进行数据处理,我想通过pandas 做一个数据的筛选和预处理,所以我的文件想写入的是pandas,
使用pandas模块来读取文件。直接读取会卡死机器。文件有70G大小。

解决方案:

经过调研:

第一种方法:

reader = pd.read_table('tmp.csv', sep='|', chunksize=4) 可以直接读取
文件for chunk in reader: print(chunk)第二种方式:

指定iterator=True 也可以返回一个可迭代对象TextFileReader :

reader = pd.read_table('tmp.sv', sep='|', iterator=True)

第三种方式:

通过linux 的文件切割指令先对文件切割后再处理 split 命令:split -l 10000000 -a 5
ELECTRICCURRENTDATA_3201150001对文件按行切割后成小文件处理

最终我选择了使用第三者,因为文件太大了,我担心程序处理过程种出现状况不好,
导致程序得全部重新来过,太不划算。

最后一种方式的好处还有就是可以并行处理,把文件分割成合适的行数,可以一次性读入数据,
进行全数据块分析处理,效率高于一行一行处理。

==========================

没有去做过多优化,解决了问题,后续还有很多要做!


您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.