0

我有一个包含以下列的 matlab 表。让我们称之为“参考表”: [Security(char),RegionId(int either 1,2,3) ] 这个表的高度约为 49,000

我有其他包含 Security(char) 和随机数据点作为列的表。让我们将这些表称为“数据表”。这些数据表的总大小为 45Gigs。这些表中的每一个都超过 1 亿行。我需要使用参考表来映射 regionId 并执行以下操作:

[Security(char),RandomDataPoint(float)] > [Security(char),RegionId(int 1,2,3),RandomDataPoint(float)]

通常对于此操作,我会使用表连接。但是,由于这些表的大小,我在这个实现中遇到了真正的问题。我的主要问题是内存不足。

一种选择是将表格分解为部分并加入。但是,考虑到 45Gigs 的聚合数据,我怀疑这在时间方面会非常昂贵。

有没有人对我应该如何解决这个问题有任何建议。如果重要,我需要将区域列添加到我的数据表中,以便我可以将数据写入文本文件并将它们批量加载到 sql 中。

提前致谢

4

1 回答 1

0

我知道回答你自己的问题很糟糕,但这就是我最终的结果。

经过大量测试,这是我发现最快的。我完全放弃了加入。

maskfor1 = ismember(data.Securities,reference.Securities(reference.RegionId==1))

现在我减少了必须使用 maskfor1 检查 regionId == 2 的证券数量。然后我重新创建了 maskfor2 应该是什么样子。

maskFor2 = zeros(height(data.Securities),1);

minitureMaskFor2 = ismemeber(data.Securities(~masfor1),reference.Securities(reference.RegionId==2))

maskFor2(~maskfor2) = minitureMaskFor2;

剩下的是 regionId = 3。现在使用掩码为表创建一个 regionId 列。

这个过程大约需要 1 分 20 秒才能运行 1 亿行。

于 2015-05-05T19:55:55.720 回答