Q / kdb +读取巨大的文本文件

时间:2013-03-27 13:58:55

标签: bigdata kdb q-lang

我需要读取一个包含交易数据的大文件(大约20G),我想知道是否有一个很好的方法来读取文件而不会丢失内存。

我当前的方法是按列加载文件并将这些列连接在一起:

columnA:(" S "; 10 20 30)0:`filepath

这种方法的问题在于它虽然速度非常快,但却占用了大量的内存,我想提高其内存使用率。

我也试过使用.Q.fs,但加载文件需要3个多小时......

有没有办法在不消耗大量内存的情况下有效地做到这一点?

由于

2 个答案:

答案 0 :(得分:3)

.Q.fsn.Q.fs的一个版本,允许指定以字节为单位读取的块的大小,.Q.fs使用默认大小131000。你可以增加块大小,这将加快速度。 .Q.fsn有三个参数,前两个与.Q.fs相同,最后一个是大小。

答案 1 :(得分:1)

您是否需要将表保留在内存中,或者这是将表写入磁盘的中间步骤?

如果你想将表保存在内存中,听起来你的RAM没有足够的。无论您是读取每个列,然后使用.Q.fs加入或流式传输表,我都怀疑总内存占用量是相似的。

您可以按照显示如何处理大型文件的步骤here进行操作,但所有这些步骤都使用.Q.fs。我的猜测是你已经看过这个了。

如果要将表作为显示表直接保存到磁盘,则可以读取每列,然后单独写出。然后从内存中删除该列,然后再转到下一个列。