一系列大約 90 個 netCDF 文件,每個文件大約 27 MB,使用 xarray 的 open_mfdataset 打開需要很長時間才能加載一個小的時空選擇。分塊維度產生邊際收益。decode_cf=True 無論是在函數內部還是單獨的也沒有區別。這里的另一個建議https://groups.google.com/forum/#!topic/xarray/11lDGSeza78讓我將選擇保存為單獨的 netCdf 并重新加載。當 dask 部分必須做一些工作(加載、計算、轉換為 pandas 數據幀)時,它似乎成為瓶頸。使用 dask.visualize 生成圖形會生成一個巨大的圖像。它可能告訴我們一些事情,但我不確定如何解釋。wind = xr.open_mfdataset(testCCMPPath,\ decode_cf=True,\ chunks={'time': 100,\ 'latitude': 100,\ 'longitude': 100})%timeit wind.sel(latitude=latRange, longitude=windLonRange, time=windDateQueryRange).load()wxr = wind.sel(latitude=latRange, longitude=windLonRange, time=windDateQueryRange)df = wxr.to_dataframe()print(df.shape)timeit 輸出顯示每個循環 1.93 秒 ± 29.8 毫秒(平均值 ± 標準偏差。7 次運行,每個循環 1 個)df.shape 輸出只有 164x3。對于另一個 xr 數組,我有一個類似的 sel,并且得到的時間約為 0.05 秒,但是這有很多稀疏點。wind xr 陣列幾乎沒有空格。
1 回答

千巷貓影
TA貢獻1829條經驗 獲得超7個贊
事實證明,文件數量太多,dask 無法有效處理。
這些文件具有緯度、經度和時間維度。在這種情況下,時間的粒度為 3 小時。我正在操作的時間尺度使得我正在處理大約 35000 個文件。太多的dask處理。我通過按年合并文件來解決這個問題,將 .nc 文件的數量減少到 12 個。
CDO (Climate Data Operators) 是一個讓我們快速合并文件的實用程序。有關詳細信息,請參閱 [ https://www.unidata.ucar.edu/software/netcdf/software.html#CDO][1] 。
我如何使用 cdo 的示例:對于目錄 ./precip/2004 中的一組文件,我運行 shell 命令來創建一個連接的 netCDF 文件 2004.nc
cdo cat ./precip/2004/*.nc4 2004.nc
從那里開始, xr.open_mfdataset() 表現得更好。
添加回答
舉報
0/150
提交
取消