问题
我有一个自定义类CachedStatistics
,其中包含一个轻松的数据框。它还具有可以依赖于dask方法或其他自定义方法的自定义方法。
此类旨在作为dask.dataframe的扩展,具有dask最初不存在的新操作。
以下是简化的实现方式:
class CachedStatistics:
def __init__(self, parquet)
self.df = dd.read_parquet(parquet)
self.cached = ..
# method to implement cache
def _call_method(self, name):
if self.cached[name] is None:
self.cached[name] = self.getattr(name).__call__()
return self.cached[name]
def nrows(self):
return len(self.df)
def count(self):
return self.df.count()
def missing_pct(self):
return self._call_method("nrows") / self._call_method("count")
def test_missing(self):
if self._call_method("missing_pct") < 0.5:
return True
else:
return False
def col_mean(self, col)
return self.df[col].mean()
def summary(self):
df_dict = {
'missing_pct': self._call_method("missing_pct") ,
'mean' : self._call_method("mean")
}
return pd.Series(df_dict)
例如,我希望能够在dask.compute
上调用missing_pct()
,并使其不仅保存missing_pct()
的结果,还保存每个依赖项的结果({{1}和nrows()
)。
在尝试实现自定义集合的情况下,我试图找到一种方法来实现此目的,但不知道如何实现。
我希望能够通过单个dask.compute()计算多个统计信息,以避免开销并最大化性能。
我试图使每个方法都延迟,但是当我在外部方法上调用compute时,嵌套延迟对象不会被计算,因为dask会解压缩延迟对象。 例:
从我从文档中读取的内容来看,让所有方法输出一个HighLevelGraph似乎是可行的方法,但是我不确定如何将当前定义的方法转换为依赖项字典,因为我非常喜欢能够像现在一样定义方法。
感谢您的帮助或指导性建议。