我有一个 3.6 亿记录的观鸟数据数据
框,我想以分布式方式
计算每种鸟类的质心作为年日的函数。dask
我想要做:
df2 = df.groupby(['VERNACULARNAME', 'yearday']).mean()
但我需要先计算yearday
,我不知道是否有办法使用dask
. 我希望 dask 可能只是将新数据保留给dask
工作人员,但是当我尝试时:
def yearday(r):
r['yearday'] = dt.datetime(r['YEAR'], r['MONTH'], r['DAY']).timetuple().tm_yday
return r
df.apply(yearday, axis=1).persist()
它不能扩展。
如果有人想实际尝试,可以像这样加载数据:
import dask.dataframe as dd
df = dd.read_parquet('s3://esipfed/ebird/EOD_CLO_2016.parq.gz',
storage_options={'anon': True, 'use_ssl': False})
注意:虽然我称这个数据集EOD_CLO_2016.parq.gz
为,但它被分块在 S3 存储桶中的许多对象上以促进并行化。每个块都被压缩。
有没有办法以分布式方式即时进行计算,或者我需要在使用 yearday 列之前编写另一个数据文件groupby
来执行可扩展部分?