我有大约 30GB 未压缩的空间数据,包含几何图形、id 和一些字符串。它们与这些列一起保存为 Dask DataFrame。 id|几何|...| 12|点(..)|...|
因为它们太大了,无法容纳任何具有一个大数据框的worker,所以我考虑将它们保存到worker上每个分区的本地数据库中。
不知道这样是否正确?或者有更好的方法来做到这一点? 顺便说一句,我不在乎返回的数据,所以我放了一个元数据。我假设计算调用是同步的,它将在所有保存调用返回后返回。
def save(self, gdf, layer):
features = gdf["geometry"].values
if features.shape[0] > 0:
... a call to file database
return dd.utils.make_meta(features)
dataframe.map_partitions(self.save, layer=layer, meta=dd.utils.make_meta(features)).compute()
谢谢
我从此页面找到了答案https://docs.dask.org/en/stable/delayed-collections.html
dfs = [delayed(load)(fn) for fn in filenames]
df = dd.from_delayed(dfs)
df = ... # do work with dask.dataframe
dfs = df.to_delayed()
writes = [delayed(save)(df, fn) for df, fn in zip(dfs, filenames)]
dd.compute(*writes)