在R中对大数据进行引导采样(太大,无法装入RAM)
是否可以从.Rdata对象或存储在磁盘上的任何其他大型数据对象中提取引导样本?我目前从非常大的数据中采样的方法是构建一个本地MySQL数据库,然后使用SQL将随机样本抽取到R中。不幸的是,MySQL中的采样和排序根本没有效率。我想知道是否有人为这个用例设计了更好的解决方案 要了解我当前的解决方案,请参阅以下关于MySQL中采样的问题: 一般说明 您不必将所有数据加载到sample,只需加载行的id,并从id中进行采样。然后仅加载采样行的数据。更详细地说:在R中对大数据进行引导采样(太大,无法装入RAM),r,bigdata,sampling,R,Bigdata,Sampling,是否可以从.Rdata对象或存储在磁盘上的任何其他大型数据对象中提取引导样本?我目前从非常大的数据中采样的方法是构建一个本地MySQL数据库,然后使用SQL将随机样本抽取到R中。不幸的是,MySQL中的采样和排序根本没有效率。我想知道是否有人为这个用例设计了更好的解决方案 要了解我当前的解决方案,请参阅以下关于MySQL中采样的问题: 一般说明 您不必将所有数据加载到sample,只需加载行的id,并从id中进行采样。然后仅加载采样行的数据。更详细地说: 例如,如果数据库中有一个名为ID的列,则
ID
的列,则只加载该列。这应该很快,特别是当ID
是一个整数时。即使您有(比如)20亿条记录,也只需要8GB内存来存储20亿个整数,所以这应该是可能的RSQLite
包RSQLite
支持与数据帧绑定,因此要加载采样数据,只需将采样的id放入名为samp_id
(单列名为id
)的数据帧中,然后说
...
my_samp <- dbGetQuery(con, "SELECT * FROM mytable WHERE id = :id",
bind.data = samp_ids)
...
然后,您可以编写SELECT以加入临时表tmp
和原始数据表。概述
您不必将所有数据加载到sample,只需加载行的id,并从id中进行采样。然后仅加载采样行的数据。更详细地说:
ID
的列,则只加载该列。这应该很快,特别是当ID
是一个整数时。即使您有(比如)20亿条记录,也只需要8GB内存来存储20亿个整数,所以这应该是可能的RSQLite
包RSQLite
支持与数据帧绑定,因此要加载采样数据,只需将采样的id放入名为samp_id
(单列名为id
)的数据帧中,然后说
...
my_samp <- dbGetQuery(con, "SELECT * FROM mytable WHERE id = :id",
bind.data = samp_ids)
...
然后,您可以编写SELECT以加入临时表
tmp
和原始数据表。您可以使用ff包,使用基于文件的对象并从中采样。同样,bigmemory包也允许文件备份对象。您可以使用ff包,使用基于文件的对象,并从中获取示例。通过bigmemory软件包也是如此,该软件包也允许文件备份对象。这感觉像是一个注释。是否要详细说明如何使用行ID对未存储在内存中的对象进行采样?仅加载行ID。例如,如果是SQL表,则SQL行ID。如果对象没有行ID,那么将ID分配给行。完全没有,只需提供一个示例说明您的意思。我认为@thelatemail也很感兴趣。@Brandon Bertelsen:更好?这感觉像是一个评论。您想进一步说明如何使用行ID从未存储在内存中的对象中采样吗?只加载行ID。例如,如果是SQL表,则SQL行ID。如果对象没有行ID,那么将ID分配给行。完全没有,只需提供一个示例说明您的意思。我想《末日邮报》也有兴趣。@BrandonBertelsen:更好吗?