我想从 Dask Dataframe 列创建一个列表/集。基本上,我想使用此列表通过将值与此数据框中的列匹配来过滤另一个数据框中的行。我尝试过使用list(df[column])
,set(df[column])
但它需要很多时间并且最终会在创建集群时出现错误,或者有时它会在达到内存限制时重新启动内核。
我可以使用dask.bag
或 Multiprocessing 创建列表吗?
我想从 Dask Dataframe 列创建一个列表/集。基本上,我想使用此列表通过将值与此数据框中的列匹配来过滤另一个数据框中的行。我尝试过使用list(df[column])
,set(df[column])
但它需要很多时间并且最终会在创建集群时出现错误,或者有时它会在达到内存限制时重新启动内核。
我可以使用dask.bag
或 Multiprocessing 创建列表吗?
当您尝试将列转换为列表或使用常规list/set
Python 设置时,会将其加载到内存中,这就是您遇到内存限制问题的原因。
我相信通过使用dask.bag
您可能会解决该问题,因为dask.bag
将延迟加载您的数据,尽管我不确定是否df[column]
不必先读取。另外,请注意,将那一列变成一个袋子需要一段时间,具体取决于数据的大小。
使用 adask.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 表达式以满足您的需要。
让我知道这是否有帮助