1

我正在使用 graphlab 和 sframes 在 ipython 笔记本中构建重复订单报告。我有一个 csv 文件,其中包含大约 100k 行数据,其中包含user_id, user_email, user_phone. 我添加了一个名为唯一标识符的新列。对于每一行,我都遍历所有其他行以查看是否或user_id匹配当前记录。如果唯一标识符不为空并且有匹配项,我从当前记录分配到每个匹配记录的 unique_identifier 槽。user_emailuser_phoneuser_id

最后,我得到一个有 4 列的 SFrame,其中unique_identifier包含user_id所有匹配订单的最旧订单。我通过.apply带有 lambda 函数的方法来做到这一点。整个过程在我的笔记本电脑上需要几秒钟。但是,在该过程完成后,SFframe 变得非常缓慢且难以管理,以至于 SFrame.save 似乎永远需要花费。

似乎我添加内存的过程会unique_identifier阻塞内存或类似的东西。但是,该问题与帧大小无关。如果我将其限制为 10 行,问题仍然存在。我究竟做错了什么?

这是我的方法

def set_unique_identifier():
  orders['unique_identifier'] = ''
  orders['unique_identifier'] = orders.apply(lambda order:      
       order['unique_identifier'] if order['unique_identifier'] else                                          
       orders[(orders['user_email']==order['user_email']) | 
       (orders['phone'] == order['user_phone'])][0]['user_id'])
4

1 回答 1

0

不要在整个 sframe 上使用 apply,而是在 SArray 上使用它,这应该会加快一点

于 2018-04-22T19:06:35.617 回答