繁体   English   中英

使用低RAM和低资源在python中处理大型数据文件,使用Python / ODBC在SQLserver数据库中的本地PC上创建大型数据文件

[英]Handling large data files in python with low RAM low resource, creating large datafiles at local PC from SQLserver database using Python / ODBC

我对Python很陌生。 在我们公司中,我们使用Base SAS进行数据分析(ETL,EDA,基本模型构建)。 我们要检查是否可以用Python替换大块数据。 关于这一点,我有以下几个问题:

  1. python如何处理大文件? 我的电脑的RAM为8gb,平面文件为30gb(例如csv文件)。 我通常会在此类文件上执行左联接,删除,分组等操作。 这在SAS中很容易做到,即我不必担心内存不足。 在python中可以执行相同的操作吗? 如果有人可以提供相同的库和代码列表,将不胜感激。

  2. 我如何在python中执行SAS操作(如python中的“ PROC SQL”)以在本地PC中创建数据集,同时从服务器获取数据。 即在SAS中,我将通过执行以下操作从SQL Server下载1000万行(7.5 GB的数据)


libname aa ODBC dsn =sql user = pppp pwd = XXXX; libname bb '<<local PC path>>';

proc sql outobs = 10000000;
create table bb.foo as
select * from aa.bar
;quit;

在python中执行相同操作的方法是什么? 再次提醒您-我的电脑只有8 GB RAM

Python特别是python 3.X提供了许多处理大型文件的工具,其中之一是使用迭代器。

Python返回输入的结果(从文本或csv或...读取)实际上是open文件的结果作为迭代器,因此您将不会有将整个文件加载到内存中的问题,使用此技巧可以读取您的逐行并根据您的需要处理它们。

例如,如果您想将文件夹在一个块中,则可以使用deque对象保留属于一个块的行(根据您的条件)。

除了collections.deque函数外,您还可以使用一些itertools函数来处理并在行上应用条件,例如,如果要在每次迭代中访问下一行,可以使用itertools.zip_longest函数,并从中创建多个独立的迭代器您的文件对象可以使用itertools.tee

最近我写了一个代码来过滤一些性能非常好的大型日志文件(30GB及更大)。我将代码放在github中,您可以检查它并使用它。

https://github.com/Kasramvd/log-filter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM