添加新列后,SFrame操作会减慢

时间:2016-12-12 09:09:07

标签: python machine-learning graphlab sframe

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

最后,我得到一个包含4列的SFrame,其中unique_identifier包含所有匹配订单的最旧订单的user_id。我通过.apply方法使用lambda函数执行此操作。我的笔记本电脑上整个过程需要几秒钟。但是,在完成该过程之后,SFframe变得极其缓慢且无法管理到SFrame.save似乎永远存在的程度。

似乎我的添加unique_identifier的过程堵塞了内存或类似的东西。但是,问题与sframe大小无关。如果我将其限制为仅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'])

1 个答案:

答案 0 :(得分:0)

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