数据表中的内存限制:不允许使用负长度向量
发布时间:2020-12-14 04:21:59 所属栏目:大数据 来源:网络整理
导读:我有一个包含多个社交媒体用户和他/她的粉丝的数据表.原始数据表格式如下: X.USERID FOLLOWERS1081 4053807021,2476584389,4713715543,... 因此,每行包含一个用户以及他/她的ID和一个关注者矢量(用逗号分隔).总共有24,000个唯一身份用户ID和160,000,000个独
我有一个包含多个社交媒体用户和他/她的粉丝的数据表.原始数据表格式如下:
X.USERID FOLLOWERS 1081 4053807021,2476584389,4713715543,... 因此,每行包含一个用户以及他/她的ID和一个关注者矢量(用逗号分隔).总共有24,000个唯一身份用户ID和160,000,000个独立粉丝.我希望以下列格式转换原始表: X.USERID FOLLOWERS 1: 1081 4053807021 2: 1081 2476584389 3: 1081 4713715543 4: 1081 580410695 5: 1081 4827723557 6: 1081 704326016165142528 为了获得这个数据表,我使用了以下代码行(假设我的原始数据表被称为dt): uf <- dt[,list(FOLLOWERS = unlist(strsplit(x = FOLLOWERS,split= ','))),by = X.USERID] 但是,当我在整个数据集上运行此代码时,我收到以下错误: 不允许使用负长度向量 根据关于堆栈溢出的这篇文章(Negative number of rows in data.table after incorrect use of set),我似乎碰到了data.table中列的内存限制.作为一种解决方法,我以较小的块(每10,000个)运行代码,这似乎有效. 我的问题是:如果我改变我的代码,我可以防止这个错误发生或我碰到R的限制? PS.我有一台140GB RAM的机器,所以物理内存空间应该不是问题. > memory.limit() [1] 147446 解决方法
当数据集中的行数超过R的限制2 ^ 32-1时,会发生此问题. ?解决此问题的方法之一是以块(在循环内)读取数据集. 看起来您的文件按X.USERID字段排序,因此您的块(当您读取文件时)应该与唯一关注者的数量重叠,以确保每个用户属于至少一个包含所有关注者的块. 处理此块的方式很大程度上取决于您需要对数据执行的操作.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |