【问题标题】:Ways of Creating List from Dask dataframe column从 Dask 数据框列创建列表的方法
【发布时间】:2020-12-31 10:07:46
【问题描述】:

我想从 Dask Dataframe 列创建一个列表/集。基本上,我想使用此列表通过将值与此数据框中的列匹配来过滤另一个数据框中的行。我曾尝试使用list(df[column]) set(df[column]),但它会花费大量时间并最终导致有关创建集群的错误,或者有时它会在达到内存限制时重新启动内核。

我可以使用dask.bag 或 Multiprocessing 创建列表吗?

【问题讨论】:

    标签: python dask dask-dataframe


    【解决方案1】:

    当您尝试将列转换为列表或使用常规 list/set 设置时,Python 会将其加载到内存中,这就是您遇到内存限制问题的原因。

    我相信通过使用dask.bag,您可能会解决该问题,因为dask.bag 会延迟加载您的数据,尽管我不确定是否不必先读取df[column]。另外,请注意,将那一列变成一个袋子需要一段时间,具体取决于数据的大小。

    使用dask.bag 允许您运行映射、过滤和聚合,因此它似乎可以很好地解决您的问题。

    您可以尝试运行它以查看它是否按预期过滤列表/袋子。

    import dask.bag as db
    
    bag = db.from_sequence(df[column], npartitions=5) 
    
    bag.filter(lamdba list_element: list_element == "filtered row")
    
    

    由于这只是一个示例,您需要更改 npartitions 和 lambda 表达式以满足您的需求。

    如果这有帮助,请告诉我

    【讨论】:

    • 嘿@FabioRosado,我尝试从df[column] 创建包,但创建包看起来差不多2分钟。我的 Dataframe 有大约 1000 万行。可能这就是它看起来很长的原因。
    • 老实说我很害怕,我最初的直觉告诉我,通过将数据帧传递给一个包,dask 必须首先读取每个元素,即使是以一种懒惰的方式进行它将花费 n 时间阅读。我会尝试看看我是否能想出一个更好的方法来做到这一点,如果我能想到一些事情,我会编辑我的回复
    猜你喜欢
    • 2020-09-19
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多