使用python / dask连接300行csv以获取6亿行

时间:2019-02-12 15:02:06

标签: python python-3.x pandas dask

我正在编写一个python程序,需要读取约300行乘30列(51.6kb的csv文件)数据,并且正在使用dask。我需要获得6亿行来一次又一次地复制数据。 我在运行程序时遇到麻烦,并且经常遇到内存错误。从理论上我知道我需要将结果写到磁盘上,否则会导致内存溢出。

我确定想要的行数(在这种情况下为600,000,000),然后除以csv中的行总数,然后四舍五入以获得放大倍数。我的csv中有326行,放大倍数为1840491。因此,我将326行并排连接180m次,以略高于6亿行。 假设我有行 1 a b c 2天 3 g h i

我需要将其连接起来,并将其1 2 3(无索引)增加到6亿。我还需要为其他2列增加数字范围,并且它不能单独工作。当我设置索引时花了一段时间,但不知道该怎么做。这是一些抽象的代码。

此外,当测试少量行样本(20,000)时,anotherCol和anotherCol2不起作用。假设anothercol和anothercol2在数值上是数据帧的长度,而第二个则只是从1到df的长度递增的数字。我收到此错误: ValueError:并非所有分区均已知,无法对齐分区。请使用set_index设置索引。

rowsDesired = 600000000
df = dd.read(csvfile)
dfrows = len(df)
magnifyLevel = int(math.ceil(rowsDesired/dfrows))
newdf = dd.concat([df]*magnifyLevel, axis = 0)
newdf['anotherCol'] = dd.from_array(np.arange(len(newdf)))
newdf['anotherCol2'] = dd.from_array(np.arange(len(newdf),(len(newdf)*2)))

我希望压缩的镶木地板文件已经存在于代码中。我可以使用dask to_parquet命令。

0 个答案:

没有答案