【问题标题】:Matlab: Large Data Mapping char to IntMatlab:大数据映射 char 到 Int
【发布时间】:2015-05-06 03:55:55
【问题描述】:

我有一个包含以下列的 matlab 表。让我们称之为“参考表”: [Security(char),RegionId(int 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 中。

提前致谢

【问题讨论】:

  • 您确定要/需要使用 MATLAB 来完成此类任务吗?使用专用的数据库服务器怎么样,或者使用 MATLAB 中的 JDBC 进行接口?
  • 问题是我得到了 .mat 文件。我能想到的另一件事是创建一个带有参考数据的临时 sql 表和一个用于数据表的临时 sql 表 -> 加入 sql -> 然后将它们插入我想要的表中。但是,我想找到一些更美观的东西。
  • 您可能对 mapreduce 感兴趣:mathworks.com/help/matlab/examples/…。我从未使用过它,但似乎适合您的任务
  • 如果您能够与编写文件的人取得联系,他可能会成为这里的资产。至少有人设法生成了巨大的 .mat 文件,所以我猜同样有人知道如何读取数据。
  • 谢谢,我以前没听说过。我去看看

标签: matlab join mapping matlab-table


【解决方案1】:

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

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

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 亿行。

【讨论】:

    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 2020-12-17
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多