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