如何在 Dask 中高效地从 DataFrame 到多个 Series?
How to go from DataFrame to multiple Series efficiently in Dask?
我正在尝试找到一种有效的方法将 DataFrame
转换为 Dask 中的一堆持久化 Series
(列)。
考虑一个场景,其中数据大小远大于工作内存的总和,并且大多数操作将被 read-from-disk / spill 包装-到磁盘。对于仅对单个列(或成对的列)进行操作的算法,为每个列操作从磁盘读入整个 DataFrame 是低效的。在这种情况下,最好在本地从(可能持久化的)DataFrame 切换到持久化列。天真地实施:
persisted_columns = {}
for column in subset_of_columns_to_persist:
persisted_columns[column] = df[column].persist()
这可行,但效率很低,因为 df[column]
将从磁盘重新读取整个 DataFrame N = len(subset_of_columns_to_persist)
次。是否可以基于单个 read-from-disk 反序列化操作单独提取和保留多个列?
注意:len(subset_of_columns_to_persist)
是 >> 1,即简单地将 DataFrame 投影到 df[subset_of_columns_to_persist]
不是我正在寻找的解决方案,因为它仍然有一个重要的 I/O持久化单个列的开销。
您可以使用 dask.persist
函数同时保留多个集合。这将共享中间体。
columns = [df[column] for column in df.columns]
persisted_columns = dask.persist(*columns)
d = dict(zip(df.columns, persisted_columns))
我正在尝试找到一种有效的方法将 DataFrame
转换为 Dask 中的一堆持久化 Series
(列)。
考虑一个场景,其中数据大小远大于工作内存的总和,并且大多数操作将被 read-from-disk / spill 包装-到磁盘。对于仅对单个列(或成对的列)进行操作的算法,为每个列操作从磁盘读入整个 DataFrame 是低效的。在这种情况下,最好在本地从(可能持久化的)DataFrame 切换到持久化列。天真地实施:
persisted_columns = {}
for column in subset_of_columns_to_persist:
persisted_columns[column] = df[column].persist()
这可行,但效率很低,因为 df[column]
将从磁盘重新读取整个 DataFrame N = len(subset_of_columns_to_persist)
次。是否可以基于单个 read-from-disk 反序列化操作单独提取和保留多个列?
注意:len(subset_of_columns_to_persist)
是 >> 1,即简单地将 DataFrame 投影到 df[subset_of_columns_to_persist]
不是我正在寻找的解决方案,因为它仍然有一个重要的 I/O持久化单个列的开销。
您可以使用 dask.persist
函数同时保留多个集合。这将共享中间体。
columns = [df[column] for column in df.columns]
persisted_columns = dask.persist(*columns)
d = dict(zip(df.columns, persisted_columns))