加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数据表中的内存限制:不允许使用负长度向量

发布时间: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字段排序,因此您的块(当您读取文件时)应该与唯一关注者的数量重叠,以确保每个用户属于至少一个包含所有关注者的块. 处理此块的方式很大程度上取决于您需要对数据执行的操作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读