标签: intake

为什么在使用 dask 时 zarr 的性能比镶木地板好得多?

当我使用 dask 对 zarr 数据和 parquet 数据运行基本相同的计算时,基于 zarr 的计算明显更快。为什么?可能是因为我在创建镶木地板文件时做错了什么?

我在 jupyter notebook 中用虚假数据(见下文)复制了这个问题,以说明我所看到的行为类型。我很感激任何人对为什么基于 zarr 的计算比基于镶木地板的计算快几个数量级的见解。

我在现实生活中使用的数据是地球科学模型数据。特定的数据参数并不重要,但可以将每个参数视为具有纬度、经度和时间维度的数组。

要生成 zarr 文件,我只需写出我的参数及其维度的多维结构。

为了生成镶木地板,我首先将 3-D 参数数组“展平”为一个 1-D 数组,它成为我数据框中的单列。然后我添加纬度、经度和时间列,然后将数据框写为镶木地板。


此单元格具有其余代码所需的所有导入:

import pandas as pd
import numpy as np
import xarray as xr
import dask
import dask.array as da
import intake
from textwrap import dedent
Run Code Online (Sandbox Code Playgroud)

该单元生成假数据文件,总大小超过 3 GB:

def build_data(lat_resolution, lon_resolution, ntimes):
    """Build a fake geographical dataset with ntimes time steps and 
       resolution lat_resolution x lon_resolution"""
    lats = np.linspace(-90.0+lat_resolution/2,
                       90.0-lat_resolution/2,
                       np.round(180/lat_resolution))
    lons = np.linspace(-180.0+lon_resolution/2,
                       180-lon_resolution/2,
                       np.round(360/lon_resolution)) …
Run Code Online (Sandbox Code Playgroud)

python dask intake

5
推荐指数
1
解决办法
1166
查看次数

标签 统计

dask ×1

intake ×1

python ×1